Я пытаюсь использовать $curl
в PHP для доступа к API-интерфейсу stackoverflow, чтобы получить основную информацию. Я просмотрел документы и попробовал около ста комбинаций заголовков и curl_setopt
команды и ничего не вернется правильно. Кто-нибудь использовал curl в PHP для доступа к API stackoverflow? Какие параметры вы использовали для этого?
Это моя работа в ее нынешнем виде, обратите внимание, что вы можете увидеть закомментированную работу для комбинаций запросов curl, которые я пробовал:
$stack_url = 'https://api.stackexchange.com/2.2/info?site=stackoverflow&key=';
$header[] = "Accept:application/json";
// $header[] = "Accept-Encoding:gzip, deflate";
// $header[] = "Cache-Control:cache";
// $header[] = "Cache-Control:no-cache";
// $header[] = "Accept-Language:en-US,en;q=0.5";
$header[] = "Content-Length: 1000";
$header[] = "Content-Type:application/json";
// $header[] = "Cookie:23";
// $header[] = "X-Requested-With:XMLHttpRequest";
// here we curl request to amazon no matter what
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $stack_url);
// the needed settings for this curl request
// curl_setopt( $curl, CURLOPT_HEADER, 1 );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_HTTPHEADER, $header);
// curl_setopt( $curl, CURLOPT_POSTFIELDS, array());
// curl_setopt( $curl, CURLOPT_BINARYTRANSFER, 1 );
// curl_setopt( $curl, CURLOPT_POST, 1 );
$string = curl_exec( $curl );
curl_close( $curl );
debug( $string );
exit;
Прямо сейчас эта работа возвращается FALSE
, но я также вернул 400 плохих запросов по разным причинам. Я думаю, что преодолел это, но я не уверен, что делать, чтобы получить ответ на данные.
Похоже, что вы в основном там, хотя я не думаю, что какой-либо из заголовков, которые у вас есть, необходим. Главное, чего не хватает, это настройки кодировки, поскольку все ответы сжимаются (см. Общий раздел доку).
Это быстрый рабочий пример:
<?php
$stack_url = 'https://api.stackexchange.com/2.2/info?site=stackoverflow';
$string = curl_init($stack_url);
curl_setopt($string, CURLOPT_ENCODING, 'gzip'); // Required by API
curl_setopt($string, CURLOPT_RETURNTRANSFER, 1 );
$result = curl_exec($string );
curl_close($string );
var_dump($result );
Если вы делаете немного больше работы с API, вы можете посмотреть на библиотеку, чтобы управлять большей частью работы, как Stack.PHP
Других решений пока нет …