我正在开发一个网络应用程序,用于通过160by2等网站向手机发送短信。
我可以准备HTTP GET请求所需的URL,如SMS Gateway提供商smslane.com提供的API中所述,这里是link for the API。
如何从PHP发送HTTP请求?
我为此目的使用了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()
,因为端口号未知,请向支持团队邮寄端口号。 (如果邀请任何通过GET方法的fsockopen代码:)。 )
有没有其他方法可以做到这一点?
欢迎任何帮助。
提前致谢。
修改
任何人都可以告诉我除了 cURL 之外还有其他方法可以发送此HTTP请求吗?如果可能的话,还可以为此提供代码。
我问这是因为当前的cURL代码花了太多时间执行并在60秒后失败,我在本地系统上的php.ini中将max_execution_time增加到120,即使它对我没有好处:(。
答案 0 :(得分:11)
您的问题在于构建网址的方式。您在查询字符串中包含的空格将导致发送格式错误的请求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
。
您需要使用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);
答案 1 :(得分:7)
<?php
print file_get_contents("http://some_server/some_file.php?some_args=true");
?>
答案 2 :(得分:2)
以下代码将使用curl发出HTTP请求,并在$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;
?>
答案 3 :(得分:1)
您的代码没有任何问题,我可以立即看到。您是否尝试将网址粘贴到浏览器中以便查看响应?您甚至可以使用wget将响应下载到文件中。我想如果你想尝试使用端口80的fsocket,那就是默认的http端口。
答案 4 :(得分:1)
尝试使用以下代码。
$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。