1

所以,我有这个方法,我需要调用一个外部 url(不同的域)。有点像http://192.168.2.2:9090/send?num=100&txt=text;有没有办法在不使用 curl 的情况下做到这一点?

我想我应该澄清一下,我曾尝试使用带有 yii-curl 扩展名的 curl,但不知何故,它似​​乎不起作用。当我提供一个完整的格式化 url 时它可以工作,但是如果我尝试使用 num 和 txt 的参数修改 url,由于某种原因它不起作用。最好我正在寻找一个没有 curl 的解决方案,但如果这不可能,我可以使用一些帮助来格式化和执行正确的 url,这样我也可以为 url 提供参数。谢谢。

编辑:我不认为 file_get_contents() 会起作用,因为 url 实际上是发送短信的短信网关。电话号码和短信文本作为参数提供。如果我猜错了,请告诉我。

编辑2:这是我在这里的建议之后尝试的。

public function sendTXTSMS($sentToNum,$text)
        {

            $construct_url="http://192.168.2.2:9090/send?num={$sentToNum}&txt={$text}";
            file_get_contents($construct_url);
        }

然后像这样称呼它,

    $text='Lorem ipsum dolor ........ ';
$this->sendTXTSMS(XXXXXXXXXX,$text)

XXXXXXXXXX 当然是这里屏蔽的电话号码。

现在我收到一个 HTTP request failed! HTTP/1.1 400 Bad Request错误。allow_url_fopen 已启用,我可以通过在浏览器上键入来访问该 url。还尝试在 url 上使用 urlencode。

4

4 回答 4

1

如果是 GET 请求,您可以使用file_get_contents($url);.

如果您需要更多选项,可以尝试HTTP 库,但没有理由不直接使用 libcurl。这是标准做法。

它连接到与 SMS 相关的服务这一事实是无关紧要的。如果它是您可以连接到的服务器上的 Web 服务的 URL,您可以向它发出请求。

于 2013-10-08T21:04:14.200 回答
1

file_get_contents()allow_url_fopen如果在 中启用,将起作用php.ini,但我认为您的问题是:

当我提供一个完整的格式化 url 时它可以工作,但是如果我尝试使用 num 和 txt 的参数修改 url,由于某种原因它不起作用。

您需要对数据进行编码:

$test = urlencode($text);
$sentToNum = urlencode($sentToNum);
$construct_url = "http://192.168.2.2:9090/send?num={$sentToNum}&txt={$text}";
于 2013-10-08T21:11:19.807 回答
0

是的,您可以使用file_get_contents http://php.net/manual/en/function.file-get-contents.php

于 2013-10-08T21:04:25.173 回答
0

使用 curl 应该是一个更好的选择,因为您可以轻松处理 http 状态代码......

但是无论有没有 curl,您都需要正确构建您的 url,urlencode应该在 params 上使用,而不是在 url 上:

$sentToNum = urlencode($sentToNum);
$text = urlencode($text);
$construct_url="http://192.168.2.2:9090/send?num={$sentToNum}&txt={$text}";
于 2013-10-08T22:03:27.783 回答