Как отправить HTTP-запрос методом GET в PHP на другой веб-сайт
Я разрабатываю веб-приложение для отправки SMS на мобильный с сайта, например 160by2.
Я могу подготовить URL-адрес, необходимый для HTTP-запроса GET, как указано в API, предоставленном провайдером SMS-шлюза smslane.com, здесь ссылку для API.
как отправить HTTP-запрос из PHP?
Я использовал cURL для этой цели, но ответ не отображается. вот код, который я использовал,
<?php
$url="http://smslane.com/vendorsms/pushsms.aspx?user=abc&password=xyz&msisdn=919898123456&sid=WebSMS&msg=Test message from SMSLane&fl=0";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt( $ch, CURLOPT_URL, $url );
$content = curl_exec( $ch );
$response = curl_getinfo( $ch );
curl_close ( $ch );
echo $content;
?>
fsockopen()
не использовался, поскольку номер порта неизвестен, отправлен в службу поддержки для номера порта. (если какой-либо код для fsockopen через GET-метод предлагается:). )
Есть ли другие методы для этого?
любая помощь приветствуется.
Спасибо заранее.
ИЗМЕНИТЬ
Может ли кто-нибудь сказать мне, есть ли другой способ отправить этот HTTP-запрос, кроме cURL и, если возможно, дать код для этого.
Я прошу об этом, потому что текущий код cURL занимает слишком много времени для выполнения и не работает через 60 секунд, я увеличил max_execution_time до 120 в php.ini в своей локальной системе, хотя это не делает мне хорошо:(.
Ответы
Ответ 1
Ваша проблема в том, как вы создаете URL. Пробелы, включенные в строку запроса, приведут к отправке неверно сформированного URL-адреса запроса.
Вот пример, который копирует ваши обстоятельства:
request.php:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,
'http://your_server/response.php?foo=yes we can&baz=foo bar'
);
$content = curl_exec($ch);
echo $content;
response.php:
<?php
print_r($_GET);
Результат запроса:
Array
(
[foo] => yes
)
Причина этого в том, что строка запроса не закодирована должным образом, и сервер, интерпретирующий запрос, предполагает, что URL заканчивается в первом пробеле, который в этом случае находится в середине запроса: foo=yes we can&baz=foo bar
.
Вам необходимо создать свой URL с помощью http_build_query, который позаботится о правильном кодировании строки запроса и в целом сделает код более читабельным:
echo http_build_query(array(
'user'=>'abc',
'password'=>'xyz',
'msisdn'=>'1234',
'sid'=>'WebSMS',
'msg'=>'Test message from SMSLane',
'fl'=>0
));
Вам также нужно установить CURLOPT_RETURNTRANSFER:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
Ответ 2
<?php
print file_get_contents("http://some_server/some_file.php?some_args=true");
?>
Ответ 3
Нижеприведенный код сделает запрос HTTP с curl и возвращает ответ в $content
.
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,'http://www.anydomain.com/anyapi.php?a=parameters');
$content = curl_exec($ch);
echo $content;
?>
Ответ 4
ничего плохого в вашем коде, который я сразу вижу. Вы пытались вставить URL-адрес в браузер, чтобы увидеть ответ? Вы даже можете использовать wget для загрузки ответа на файл. Я полагаю, если вы хотите попробовать fsocket, вы бы использовали порт 80 в качестве http-порта по умолчанию.
Ответ 5
Попробуйте использовать следующий код.
$r = new HttpRequest('http://www.xencomsoftware.net/configurator/tracker/ip.php', HttpRequest::METH_GET);
try {
$r->send();
echo $r->getResponseCode();
if ($r->getResponseCode() == 200)
{
}
}
убедитесь, что вы загрузили расширение HttpRequest (обменивайтесь объектом 0 на своем сервере.