Это первый вопрос, когда-либо, поэтому я сделаю все возможное.PHP curl для sc2ranks.com API
фона Я работаю на небольшом сайте Starcraft II, который использует API из хорошо известной website. После просмотра документации, которую я получил пример работает довольно быстро, возвращая код JSON:
curl -X POST 'http://api.sc2ranks.com/v2/characters/search' -d 'name=Wodan&bracket=1v1&league=gold&expansion=hots&rank_region=global&api_key='<api_key>'
Надеясь для легкой езды я создал небольшой скрипт, который выполняет HTTP-GET запроса на API возвращении базы статистика для каждого пользователя в игре. Этот URL-адрес может быть конечно образованы непосредственно в браузере:
http://api.sc2ranks.com/v2/characters/eu/1616021?api_key=<api_key>
Это обрабатывается в моем коде следующим образом (примечание: $ URL является выше URL и $ this-> сеанс инициализации завитка):
curl_setopt($this->session,CURLOPT_URL, $url);
curl_setopt($this->session,CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->session,CURLOPT_HEADER, true);
if(!$result = curl_exec($this->session))
exit("cURL Error: " . curl_error($this->session));
else
return $result;
проблема Ну на моем пути я решил использовать более продвинутые функции API, чтобы получить более подробную информацию о элементе. Однако здесь начинается путаница. Оглядываясь назад на вышеупомянутый оригинальный curl post в терминале, он показывает два варианта. -X (запрос) и -d (данные для сообщения). Выяснение первым будет правильным URL сделать запрос HTTP-POST к и позднее время данные, я придумал следующий пример:
$url = "http://api.sc2ranks.com/v2/characters/search/";
$data = "league=all&rank_region=global&expansion=hots&bracket=1v1&name=Wodan?api_key=<my_key>";
curl_setopt($this->session, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($this->session, CURLOPT_POSTFIELDS, $data);
curl_setopt($this->session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->session, CURLOPT_HTTPHEADER, array(
'Content-Type: text/html',
'Content-Length: ' .strlen($data))
);
if(!$result = curl_exec($this->session))
exit("cURL Error: " . curl_error($this->session));
else
return $result;
Я также попытался пройти выше через, как JSON формат.
Выход В результате я только получаю следующее в качестве ответа сервера: String '{' was not found in 'HTTP/1.1 404 Not Found Server: nginx Date: Sun, 17 Nov 2013 22:14:03 GMT Content-Type: text/html; charset=utf-8 Content-Length: 0 Connection: close Status: 404 Not Found X-Request-Id: 700726570451c891d48862edfc8545fb X-Runtime: 0.009002 X-Rack-Cache: invalidate, pass '
То, что я думаю, что будет неправильно Скорее всего, я не формируя запрос прямо на сервер, или мне нужно для таргетинга на определенный файл, а затем они задокументировали его. Здесь я нашел два похожих вопроса относительно POST с Curl. Но они мало помогли мне, и я чувствую, что это может помочь большему количеству людей.
Надеюсь, у кого-то в этом сообществе есть некоторый опыт работы с curl или фактическим API.
Я бы не стал напрямую использовать cURL, использовать подходящий клиент API. Я использую использование [Pest] (https://github.com/educoder/pest) - простой и эффективный. – halfer
@halfier Спасибо за ваш ответ. Это может быть альтернатива, но это не ответ на мой вопрос. Хотя я мог бы использовать Pest, в конце концов я все еще просто должен знать, что происходит неправильно. – mkoster
Это не прямой ответ, нет, но это полезно. – halfer