Ошибка HTTP-запроса! HTTP / 1.1 505 HTTP-версия Не поддерживается ошибка

Я пытаюсь использовать file_get_contents() чтобы получить ответ от сервера, и эта ошибка возникла. Может ли кто-нибудь сказать мне, в чем причина и как это исправить? Часть кода:

 $api = "http://smpp5.routesms.com:8080/bulksms/sendsms?username=$username&password=$password&source=$source&destination=$destin&dlr=$dlr&type=$type&message=$message"; $resp = file_get_contents($api); 

Сервер ответил правильно, когда я вставлял URL-адрес в браузере. Я узнал, что это вызвано отказом сервера HTTP-версии клиента, но я не знаю, почему это происходит в моем случае.

Буду признателен за любую оказанную помощь. заранее спасибо

Я нашел проблему, и это была простая ошибка кодирования – отсутствие кодировки url.

Причина, по которой я этого не заметил, сначала состояла в том, что код был в порядке, прежде чем я сделал некоторое редактирование, и я пропустил функцию urlencode() до вызова сервера, что вызвало пробел в URL-адресе.

Похоже, это причина, по которой эта ошибка возникает для большинства людей. Поэтому, если вы столкнулись с этим, используйте urlencode() для всех переменных, которые могут содержать пробел в его значении, используемом в качестве параметров URL. Поэтому в случае, когда в моем вопросе фиксированный код будет выглядеть так:

 $api = "http://smpp5.routesms.com:8080/bulksms/sendsms?username=$username&password=$password&source=$source&destination=$destin&dlr=$dlr&type=$type&message=" . urlencode($message); $resp = file_get_contents($api); 

Кроме того, спасибо за все ваше время и ответы, они были информативными.

Вы можете создать контекст потока с версией HTTP, установленной в 1.0, и использовать этот контекст с file_get_contents :

 $options = array( 'http' => array( 'protocol_version' => '1.0', 'method' => 'GET' ) ); $context = stream_context_create($options); $api = "http://smpp5.routesms.com:8080/bulksms/sendsms?username=$username&password=$password&source=$source&destination=$destin&dlr=$dlr&type=$type&message=$message"; $resp = file_get_contents($api, false, $context); 

Кстати: не забудьте с urlencode избегать ваших значений аргументов URI с помощью urlencode .

Вы можете нюхать, что происходит на проводе? Увидеть формат HTTP-запроса, поскольку он выходит на проводе, поможет многое.

Не видя этого, я бы предпочел, чтобы сервер не был хорошо реализован и отклоняет запрос HTTP / 1.1. Попробуйте установить --http1.0 на Curl и посмотреть, что произойдет …

Я столкнулся с той же проблемой, и в моем случае виновником был ошибочный символ новой строки / CRLF в конце URL-адреса запроса, который не попадает в urlencode() (или, может быть, он кодирует его, но он все еще заставляет сервер произвести ошибку). Как только я нашел проблему, запросы снова начали работать, даже без параметров контекста потока.

Надеюсь, это поможет другим.

Некоторое время мы все еще получаем ошибку с

 file_get_contents($api); 

в этом случае попробуйте следующее:

 fopen($api,"r"); 

Я также столкнулся с этой проблемой. Позже я обнаружил, что при получении результатов из mysql, Limit $ count, $ count было -ve. что URL правильно работал. В url есть некоторая проблема, и это не проблема с файлом_get_contents или http.