Intereting Posts
Интерпретация JavaScript в PHP Передача нескольких значений для одной и той же переменной GET в URL-адресе ajax увеличивает количество ответов при каждом нажатии Codeigniter перенаправляет, не сохраняя HTTPS в относительных перенаправлениях загрузка видео с ключа массива url простая html dom возвращающая строка вместо массива Невозможно экспортировать xlsx или xls в правильном формате, все данные смешаны Поиск первого дня недели через php Странное поведение при переопределении частных методов Есть ли способ сохранить целостность объектов при анализе html с помощью DomDocument? MySQL и PHP: отправлять письма членам, которые попадают в последние 3 активных потока Когда вы будете использовать это ключевое слово $ в PHP? Выпадающие окна CakePHP, не отображающие правильные данные при обновлении страницы Как проверить, является ли метка времени часом? Метод Amazon S3 – 405 Не допускается с помощью POST (хотя я разрешил POST на ковше)

PHP file_get_contents возвращается с ошибкой 400

Моя проблема довольно проста, но я не могу, чтобы жизнь меня определяла, что не так. Я сделал что-то подобное с другим 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.