file_get_contents throws 400 Ошибка Bad Request PHP

Я просто использую file_get_contents() чтобы получить последние твиты от пользователя следующим образом:

 $tweet = json_decode(file_get_contents('http://api.twitter.com/1/statuses/user_timeline/User.json')); 

Это отлично работает на моем localhost, но когда я загружаю его на свой сервер, он выдает эту ошибку:

Предупреждение: file_get_contents ( http://api.twitter.com/1/statuses/user_timeline/User.json ) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не удался! HTTP / 1.0 400 Bad Request …

Не знаете, что может быть причиной этого, может быть, настройки php, которые мне нужно установить на моем сервере?

Заранее спасибо!

Возможно, вы захотите попробовать использовать curl для извлечения данных вместо file_get_contents. curl лучше поддерживает обработку ошибок:

 // make request $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.twitter.com/1/statuses/user_timeline/User.json"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); // convert response $output = json_decode($output); // handle error; error output if(curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) { var_dump($output); } curl_close($ch); 

Это может дать вам более полное представление о том, почему вы получаете сообщение об ошибке. Общей ошибкой является ограничение скорости на вашем сервере.

Вы можете использовать file_get_contents добавив опцию ignore_errors в значение true , таким образом вы получите весь массив ответа в случае ошибки (например, HTTP / 1.1 400), а не просто просто false .

Здесь вы можете увидеть пример: https://stackoverflow.com/a/11479968/3926617

Если вы хотите получить доступ к заголовкам ответа, вы можете использовать $http_response_header после запроса.

http://php.net/manual/en/reserved.variables.httpresponseheader.php

Просто небольшое добавление к ответу Бена. В соответствии с руководством PHP опция CURLOPT_URL может быть установлена ​​при инициализации дескриптора cURL с помощью curl_init ().

 // make request $ch = curl_init("http://api.twitter.com/1/statuses/user_timeline/User.json"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); // convert response $output = json_decode($output); // handle error; error output if(curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) { var_dump($output); } curl_close($ch);