因此,我有此方法需要调用外部URL(不同的域)。就像http://192.168.2.2:9090/send?num=100&txt=text;
可以在不使用curl的情况下进行此操作吗?
我想我应该澄清一下,我已经尝试过使用带有yii-curl扩展名的curl,但是以某种方式它似乎没有用。当我提供完整格式的url时,它可以工作,但是,如果我尝试使用num和txt的参数来修改url,则由于某种原因它将无法工作。最好是我正在寻找一种解决方案,但不能卷曲,但如果无法解决,我可以在如何格式化和执行适当的url方面提供一些帮助,以便为url提供参数。谢谢。
编辑:我认为file_get_contents()不会起作用,因为该URL实际上是发送短信的SMS网关的URL。电话号码和短信文本作为参数提供。如果我猜错了,请告诉我。
Edit 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来访问它。也尝试在网址上使用urlencode。
如果是GET请求,则可以使用file_get_contents($url);
。
如果需要更多选项,可以尝试HTTP library,但是没有理由不直接使用libcurl。这是标准做法。
它连接到与SMS相关的服务的事实无关紧要。如果它是您可以连接到的服务器上Web服务的URL,则可以向它发出请求。
[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}";
是的,您可以使用file_get_contents
http://php.net/manual/en/function.file-get-contents.php
使用curl应该是更好的选择,因为您可以轻松处理http状态代码...
但是无论是否卷曲,您都需要正确构建网址,urlencode
应该用于参数,而不是网址:
$sentToNum = urlencode($sentToNum);
$text = urlencode($text);
$construct_url="http://192.168.2.2:9090/send?num={$sentToNum}&txt={$text}";