我试图在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);
答案 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);