Я разрабатываю веб-приложение для отправки 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()
поддержки для номера порта. (если какой-либо код для fsockopen через GET-метод предлагается :). )
есть ли другие методы для этого?
любая помощь приветствуется.
Заранее спасибо.
РЕДАКТИРОВАТЬ
Может ли кто-нибудь сказать мне, есть ли другой способ отправить этот HTTP-запрос, кроме cURL, и, если возможно, дать код для этого.
Я спрашиваю об этом, потому что текущий код cURL занимает слишком много времени для выполнения и не работает через 60 секунд, я увеличил max_execution_time до 120 в php.ini в моей локальной системе, хотя это не делает мне хорошо :(.
Ваша проблема заключается в том, как вы создаете 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);
<?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 (обменивайтесь объектом 0 на своем сервере.