как отправить 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);

<?php
print file_get_contents("http://some_server/some_file.php?some_args=true");
?>

приведенный ниже код сделает 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 на вашем сервере.