PHP:cURL或头-发送跨域数据和重定向的更快更好的方式


PHP: cURL or header - faster and better way to send cross domain data and redirect

我创建了一个小型API,从一个网站收集联系人表格信息,并将其存储在另一个网站的数据库中,管理应用程序也是我创建的。

在网站上哪里是联系表格是这个代码:

// collect all fields
$save = array(
    'oAuth'=>'{KEY}',
    'secret'=>'{SECRET-KEY}',
    'category'=>'Category',
    'name'=>'Jon Doe',
    'email'=>'jon@doe.com',
    'phone'=>'123 456 7890',
    // ... etc. other fields
);
// made GET request
$fields=array();
foreach($save as $key=>$val){
    $fields[]=$key."=".rawurlencode($val);
}
// Set cross domain URL
$url='http://api.mydomain.com/';
// Send informations in database
$cURL = curl_init();
    curl_setopt($cURL,CURLOPT_URL, $url.'?'.join("&",$fields));
    curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($cURL, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($cURL, CURLOPT_TIMEOUT, 2);
    curl_setopt($cURL, CURLOPT_HTTPHEADER, array('Accept: application/json'));
$output=curl_exec($cURL);
curl_close($cURL);
usleep(1000);
// redirect
header("Location: http://somemysite.com/thank-you-page");
session_destroy();
exit;

我的问题是,是像现在这样使用cURL还是使用header()函数发送GET?

我问是因为我在这里不使用输出,有时重定向在cURL完成请求之前开始。

什么是发送GET信息而不丢失数据的更快方法?

在cURL完成之前,重定向不会启动。可能发生的情况是cURL无法加载您的远程页面,并且您没有处理该错误。你应该添加这样的东西:

if($output === false || curl_getinfo($cURL, CURLINFO_HTTP_CODE) != 200) {
   // Here you handle your error
}

如果您正在寻找加载远程网页的替代方法,可以在php.ini中将allow_url_fopen设置为true,然后使用这个简单的函数而不是cURL:

$output = file_get_contents($url.'?'.join("&",$fields));