Как отправить 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 на своем сервере.