yii 执行外部Get url请求

zengzsys  于 2022-11-09  发布在  其他
关注(0)|答案(4)|浏览(197)

我有一个方法,需要调用一个外部的url(不同的域),类似于http://192.168.2.2:9090/send?num=100&txt=text;,有没有办法不用curl来实现呢?
我想我应该澄清一下,我已经尝试过将curl与yii-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。

eivnm1vs

eivnm1vs1#

如果是GET请求,则可以使用file_get_contents($url);
如果你需要更多的选项,你可以尝试HTTP library,但是没有什么理由不直接使用libcurl,这是标准的做法。
它连接到与SMS相关的服务并不重要。如果它是一个服务器上的Web服务的URL,您可以连接到该服务器,您可以向它发出请求。

v440hwme

v440hwme2#

如果在php.ini中启用了allow_url_fopenfile_get_contents()将工作,但我认为您的问题是:
当我提供一个完整的格式化URL时,它可以工作,但是如果我试图用num和txt的参数修改URL,由于某种原因,它不工作。
您需要对数据进行编码:

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

kcwpcxri4#

使用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}";

相关问题