我有一个方法,需要调用一个外部的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。
4条答案
按热度按时间eivnm1vs1#
如果是GET请求,则可以使用
file_get_contents($url);
。如果你需要更多的选项,你可以尝试HTTP library,但是没有什么理由不直接使用libcurl,这是标准的做法。
它连接到与SMS相关的服务并不重要。如果它是一个服务器上的Web服务的URL,您可以连接到该服务器,您可以向它发出请求。
v440hwme2#
如果在
php.ini
中启用了allow_url_fopen
,file_get_contents()
将工作,但我认为您的问题是:当我提供一个完整的格式化URL时,它可以工作,但是如果我试图用num和txt的参数修改URL,由于某种原因,它不工作。
您需要对数据进行编码:
lf5gs5x23#
是的,您可以使用
file_get_contents
http://php.net/manual/en/function.file-get-contents.phpkcwpcxri4#
使用curl应该是一个更好的选择,因为你可以很容易地处理http状态代码...
但是不管有没有curl,你都需要正确地构建你的url,
urlencode
应该用在params上,而不是url上: