содержимое файла 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 Мне нужно установить на своем сервере?

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

Author: Rasclatt, 2011-12-13

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);

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

 25
Author: Ben Rowe, 2013-05-07 08:50:58

Вы можете использовать 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

 3
Author: Wandeber, 2017-05-23 12:09:26

Просто небольшое дополнение к ответу Бена. В соответствии с руководством по 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);
 0
Author: bytepan, 2016-01-17 07:43:50