PHP curl没有返回所有响应

时间:2017-10-06 08:12:36

标签: php json curl truncated

我试图在php中使用一个API(像往常一样)返回一个带有请求数据的大型json响应。

它的工作原理如下:

1)我必须使用我想要的数据发出一个帖子请求(以某种格式在这里不重要)然后,

2)访问另一个带有get参数的url,我从第一步的响应中获取该参数以获取实际数据。

问题是我尝试了curl()和get_file_contents()来获取json数据,但似乎我没有得到整个json。我从浏览器访问url并手动获取json并进行比较,看看两者是否匹配。

可能出现什么问题?

这是我的代码:

$tp = new TravelPayoutApi();
$req = $tp->request_one_way('en', 'Y', 1,0,0, 'BER', 'PAR', '2017-10-22');
//$req = $tp->requestRoundTrip('en', 'Y', 1,0,0, 'BER', 'PAR', '2017-10-22','2017-10-25');
echo "req =" . $req;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/flight_search"); // $apiURL = "http://api.travelpayouts.com/v1/flight_search";

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));                                    

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// $response = array();
// echo $response;
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response, true);
$search_id = $response['search_id'];
echo $search_id;

这是获取我需要收集数据的参数的部分

以下是我努力获取并回应它们的信息:

$results = file_get_contents("http://api.travelpayouts.com/v1/flight_search_results?uuid=" . $search_id);
var_dump($results); // to see if this is really json
// $ch1 = curl_init();
// $resultsURL = "http://api.travelpayouts.com/v1/flight_search_results?uuid=" . $search_id;
// echo "This is the results URL:" . $resultsURL;
// curl_setopt($ch1, CURLOPT_URL, $resultsURL);
// curl_setopt($ch1, CURLOPT_RETURNTRANSFER,1);

// $results = curl_exec($ch1);
// $results = json_encode($results);
// curl_close($ch1);

我所尝试过的注释行和是不同的脚本。看看它们。

编辑:

好的,我尝试了原来的curl命令API (curl -v -H' Accept-Encoding:gzip,deflate,sdch' htttp://api.travelpayouts.com/v1/ flight_search_results?uuid = my_id_here --compressed),它就像一个魅力。但似乎我无法使用php curl。我总是把我的结果截断。我该怎么办?

我目前获得结果的代码是:

$ch1 = curl_init();

curl_setopt($ch1, CURLOPT_URL, $resultsURL);
curl_setopt($ch1, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate,sdch')); 
curl_setopt($ch1, CURLOPT_ENCODING, 'gzip,deflate,sdch');
// curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, 0);
//curl_setopt($ch1, CURLOPT_TIMEOUT, 15); // number of seconds to allow curl to execute

$results = curl_exec($ch1);
echo($results);
curl_close($ch1);

1 个答案:

答案 0 :(得分:1)

由于您获取数据,请尝试以下操作以检查是否将所需的所有数据都插入到文件中。

$results = file_get_contents("http://api.travelpayouts.com/v1/flight_search_results?uuid=" . $search_id);
    $fp = fopen($path_to_file, "r");  
    $fileLines = array();
    while (!feof($fp)){
      array_push(fgets($fp),$results);
    } 
    fclose($$fp);