Запрос 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 клиента, но я понятия не имею, почему это происходит в моем случае.

Любая справка очень ценится.Заранее спасибо

14
задан shyam 3 May 2010 в 12:35
поделиться

3 ответа

Я нашел проблему, и это была простая ошибка кодирования - отсутствие кодировки 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);

Также спасибо за потраченное время и ответы, они были информативными.

30
ответ дан 1 December 2019 в 07:05
поделиться

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

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

0
ответ дан 1 December 2019 в 07:05
поделиться

Вы можете создать контекст потока с версией 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);

Кстати: не забудьте правильно экранировать значения аргументов URI с помощью urlencode .

9
ответ дан 1 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: