Моя проблема довольно проста, но я не могу, чтобы жизнь меня определяла, что не так. Я сделал что-то подобное с другим API, но это меня просто ненавидит.
В основном, я пытаюсь получить информацию от https://owapi.net/api/v3/u/Xvs-1176/blob и использовать результат JSON для получения базовой информации о пользователе. Но всякий раз, когда я пытаюсь использовать file_get_contents, он просто возвращает
Warning: file_get_contents(https://owapi.net/api/v3/u/Xvs-1176/blob): failed to open stream: HTTP request failed! HTTP/1.1 400 BAD REQUEST in Z:\DevProjects\Client Work\Overwatch Boost\dashboard.php on line
Поэтому я точно не знаю, что случилось. Мой код можно увидеть здесь:
$apiBaseURL = "https://owapi.net/api/v3/u"; $apiUserInfo = $gUsername; $apiFullURL = $apiBaseURL.'/'.$apiUserInfo.'/blob'; $apiGetFile = file_get_contents($apiFullURL);
Любая помощь будет в значительной степени оценена. Спасибо!
Вам нужно установить агент пользователя для file_get_contents, как это, и вы можете проверить его с помощью этого кода. См. Это для установки пользовательского агента для file_get_contents.
<?php $options = array('http' => array('user_agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0')); $context = stream_context_create($options); $response = file_get_contents('https://owapi.net/api/v3/u/Xvs-1176/blob', false, $context); print_r($response);
Это то, что отправляет страница: «Привет! Чтобы предотвратить злоупотребление этой службой, требуется, чтобы вы настраивали свой пользовательский агент». Вы можете настроить его с помощью завитка:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://owapi.net/api/v3/u/Xvs-1176/blob"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); $output = curl_exec($ch); $output = json_decode($output); if(curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) { var_dump($output); } curl_close($ch);
Если вы делаете curl -v https://owapi.net/api/v3/u/Xvs-1176/blob
вы получите ответ, и вы увидите, какие заголовки cURL включают по умолчанию. А именно:
> Host: owapi.net > User-Agent: curl/7.47.0 > Accept: */*
Итак, вопрос в том, о чем заботится овапи? Ну, вы можете остановить cURL от отправки заголовков по умолчанию:
curl -H "Accept:" -H "User-Agent:" -H "Host:" https://owapi.net/api/v3/u/Xvs-1176/blob
… и вы получите 400 ответов. Экспериментально, вот что вы вернетесь, если вы оставите заголовки «Host» или «User-Agent»:
{"_request": {"api_ver": 3, "route": "/api/v3/u/Xvs-1176/blob"}, "error": 400, "msg": "Hi! To prevent abuse of this service, it is required that you customize your user agent."}
Как вам кажется, вам не нужен заголовок «Принять». См. Документы PHP о том, как отправлять заголовки вместе с file_get_contents.