执行外部获取URL请求

问题描述 投票:1回答:4

因此,我有此方法需要调用外部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网关的U​​RL。电话号码和短信文本作为参数提供。如果我猜错了,请告诉我。

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。

php curl yii
4个回答
1
投票

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

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

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


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

0
投票

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


0
投票

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

但是无论是否卷曲,您都需要正确构建网址,urlencode应该用于参数,而不是网址:

$sentToNum = urlencode($sentToNum);
$text = urlencode($text);
$construct_url="http://192.168.2.2:9090/send?num={$sentToNum}&txt={$text}";
© www.soinside.com 2019 - 2024. All rights reserved.