Я пытаюсь использовать API в php, который (как обычно) возвращает большой ответ json с запрошенными данными.
1) Я должен сделать запрос с данными, которые я хочу (в определенном формате, который здесь не важен), а затем,
2) Посетите другой URL, где с параметром get, который я получаю из ответа первого шага, чтобы получить фактические данные.
Проблема в том, что я попытался использовать 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);
Поскольку вы получаете данные обратно, попробуйте следующее, чтобы проверить, все ли необходимые данные будут вставлены в файл.
$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);
Других решений пока нет …