CURL没有正确执行第一次

时间:2016-08-04 08:23:32

标签: php ajax cakephp curl

我使用下面给出的代码,使用 cakephp 3 中的ajax从CURL获取 Skyscanner API 的广告结果 如果用户搜索了多个位置的航班,我正在循环中执行它,所以问题是它并不总是每次都返回所有的飞行结果,直到我刷新页面并且刷新另一个具有相同参数的ajax请求调用时比起我得到的所有结果,我不知道为什么它没有在第一时间取得所有结果请建议我最好的解决方案,谢谢大家的帮助

$apiParamsUrl = "http://www.skyscanneraffiliate.net/portal/en-GB/UK/LivePricing/TestHarness?apikey=*******&country=GB&currency=GBP&locale=en-GB&originplace=".$origin."&destinationplace=".$destination."&outbounddate=".$routes['date']['start_date']."&adults=".$routes['no_of_traveller']['no_of_traveller']."&children=0&infants=0&locationschema=iata&cabinclass=economy&groupPricing=true";

$apiParamsStr = parse_url($apiParamsUrl, PHP_URL_QUERY); 

parse_str($apiParamsStr, $apiParamsArray); 
$apiSessionUrl = 'http://partners.api.skyscanner.net/apiservices/pricing/v1.0';

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $apiSessionUrl);

curl_setopt($ch,CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded', 'Accept: application/json'));
curl_setopt($ch,CURLOPT_POST, count($apiParamsArray));
curl_setopt($ch,CURLOPT_POSTFIELDS, $apiParamsStr);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch,CURLOPT_VERBOSE, 1);
curl_setopt($ch,CURLOPT_HEADER, 1);

if(!curl_exec($ch)){
    break; 
}

$response = curl_exec($ch);
$header_size = curl_getinfo($ch,CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
curl_close($ch);

preg_match('~Location: ([^\s]+)~', $header, $matches);

1 个答案:

答案 0 :(得分:0)

尝试以下代码,我稍微改了一下:

$apiParamsUrl = "http://www.skyscanneraffiliate.net/portal/en-GB/UK/LivePricing/TestHarness?apikey=*******&country=GB&currency=GBP&locale=en-GB&originplace=" . $origin . "&destinationplace=" . $destination . "&outbounddate=" . $routes['date']['start_date'] . "&adults=" . $routes['no_of_traveller']['no_of_traveller'] . "&children=0&infants=0&locationschema=iata&cabinclass=economy&groupPricing=true";

$apiParamsStr = parse_url($apiParamsUrl, PHP_URL_QUERY);

parse_str($apiParamsStr, $apiParamsArray);
$apiSessionUrl = 'http://partners.api.skyscanner.net/apiservices/pricing/v1.0';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiSessionUrl);

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded', 'Accept: application/json'));
curl_setopt($ch, CURLOPT_POST, true); // <-- changed
curl_setopt($ch, CURLOPT_POSTFIELDS, $apiParamsStr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 0); // <-- changed
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // <-- added


$body = curl_exec($ch);
if (false === $body) {
    break;
}
curl_close($ch);

var_export($body);