Я просто использую 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);