как отправить 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 в моей локальной системе, даже если это не хорошо для меня : (.
5 ответов
ваша проблема заключается в том, как вы строите URL-адрес. Пробелы, которые вы включаете в строку запроса, приведут к отправке искаженного URL-адреса запроса.
вот пример, который повторяет ваши обстоятельства:
запрос.в 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;
ответ.в PHP:
<?php
print_r($_GET);
вывод запроса.php является:
Array
(
[foo] => yes
)
причина этого заключается в том, что строка запроса неправильно закодирована и серверная интерпретация запроса предполагает, что URL-адрес заканчивается на первом месте, которое в данном случае находится в середине запроса:foo=yes we can&baz=foo bar
.
вам нужно создать свой URL, используя http_build_query, который будет заботиться о urlencoding строки запроса правильно и, как правило, делает код выглядит гораздо более читаемым:
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);
приведенный ниже код сделает 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;
?>
ничего плохого в вашем коде, который я сразу вижу. вы пытались вставить url-адрес в браузер, чтобы увидеть ответ? вы даже можете использовать wget для загрузки ответа на файл. Я полагаю, если вы хотите попробовать fsocket, вы будете использовать порт 80, поскольку это порт http по умолчанию.
попробуйте использовать следующий код.
$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 (share object0 на вашем сервере.