содержимое файла get выдает 400 ошибок при неправильном запросе PHP
Я просто использую file_get_contents()
, чтобы получать последние твиты от пользователя, подобного этому:
$tweet = json_decode(file_get_contents('http://api.twitter.com/1/statuses/user_timeline/User.json'));
Это отлично работает на моем локальном хосте, но когда я загружаю его на свой сервер, он выдает следующую ошибку:
Предупреждение: файл_гет_контенты(http://api.twitter.com/1/statuses/user_timeline/User.json ) [функция.файл-получить-содержимое]: не удалось открыть поток: не удалось выполнить HTTP-запрос! HTTP/1.0 400 Неверный запрос...
Не уверен, что может быть причиной этого, возможно, конфигурация php Мне нужно установить на своем сервере?
Заранее спасибо!
3 answers
Возможно, вы захотите попробовать использовать 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);