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'));
Это отлично работает на моем локальном хосте, но когда я загружаю его на свой сервер, он выдает эту ошибку:
Предупреждение: file_get_contents (http://api.twitter.com/1/statuses/user_timeline/User.json) [function.file-get-contents]: не удалось открыть stream: HTTP-запрос не удался! HTTP/1.0 400 Bad Request...
Не знаете, что может быть причиной этого, может быть, настроить php на моем сервере?
Спасибо заранее!
Ответы
Ответ 1
Возможно, вы захотите попробовать использовать 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);
Это может дать вам более полное представление о том, почему вы получаете сообщение об ошибке. Общей ошибкой является ограничение скорости на вашем сервере.
Ответ 2
Вы можете использовать file_get_contents
, добавляя опцию ignore_errors
, установленную в true
, таким образом вы получите весь текст ответа в случае ошибки (например, HTTP/1.1 400), а не только простой false
.
Здесь вы можете увидеть пример: fooobar.com/questions/271824/...
Если вы хотите получить доступ к заголовкам ответов, вы можете использовать $http_response_header
после запроса.
http://php.net/manual/en/reserved.variables.httpresponseheader.php
Ответ 3
Просто небольшое добавление к ответу Бена.
В соответствии с руководством по 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);