12

我正在开发一个 Web 应用程序,用于从160by2 之类的网站向手机发送短信。

我可以准备由 SMS 网关提供商smslane.com提供的 API 中提到的 HTTP GET 请求所需的 URL ,这里是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,即使它对我没有好处:(。

4

5 回答 5

12

您的问题是您构建 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);

request.php 的输出是:

Array
(
    [foo] => yes
)

原因是查询字符串没有正确编码,并且解释请求的服务器假定 URL 在第一个空格处结束,在这种情况下,它位于查询的中间:foo=yes we can&baz=foo bar

您需要使用http_build_query构建您的 URL ,这将负责正确地对您的查询字符串进行 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);
于 2010-08-20T06:25:20.177 回答
8
<?php
print file_get_contents("http://some_server/some_file.php?some_args=true");
?>
于 2010-08-20T06:24:45.607 回答
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;
?>
于 2013-06-12T05:36:09.310 回答
1

您的代码没有任何问题,我可以立即看到。您是否尝试将 url 粘贴到浏览器中以便查看响应?您甚至可以使用 wget 将响应下载到文件中。我想如果你想尝试 fsocket,你会使用端口 80,因为那是默认的 http 端口。

于 2010-08-20T06:25:06.317 回答
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。

于 2010-08-20T07:16:58.397 回答