как отправить HTTP-запрос методом GET в PHP на другой сайт - PullRequest
11 голосов
/ 20 августа 2010

Я занимаюсь разработкой веб-приложения для отправки 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 :). )

есть ли другие способы сделать это?

любая помощь приветствуется.

Заранее спасибо.

EDIT

Может кто-нибудь сказать мне, есть ли другой способ отправить этот HTTP-запрос, кроме cURL и, если возможно, дать код для этого.

Я спрашиваю об этом, потому что текущий код cURL занимает слишком много времени для выполнения и завершается ошибкой через 60 секунд, я увеличил max_execution_time до 120 в php.ini в моей локальной системе, даже если он мне не подходит :(

Ответы [ 5 ]

11 голосов
/ 20 августа 2010

Ваша проблема в том, как вы создаете 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);

Вывод файла request.php:

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);
7 голосов
/ 20 августа 2010
<?php
print file_get_contents("http://some_server/some_file.php?some_args=true");
?>
2 голосов
/ 12 июня 2013

Приведенный ниже код сделает 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;
?>
1 голос
/ 20 августа 2010

Попробуйте использовать следующий код.

$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 (отправьте object0 на ваш сервер.

1 голос
/ 20 августа 2010

ничего плохого в вашем коде, который я сразу вижу.Вы пытались вставить URL-адрес в браузер, чтобы увидеть ответ?Вы даже можете использовать wget для загрузки ответа на файл.Я полагаю, если вы хотите попробовать fsocket, вы бы использовали порт 80, поскольку это порт http по умолчанию.

...