Я пытаюсь использовать 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-запроса, когда он передается по сети, очень поможет.
Не видя этого, я мог бы предположить, что сервер плохо реализован и отклоняет запрос HTTP / 1.1. Попробуйте установить - http1.0
на Curl и посмотрите, что произойдет ...
Вы можете создать контекст потока с версией 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
.