【问题标题】:Execute external Get url request执行外部获取 url 请求
【发布时间】:2013-10-08 20:58:49
【问题描述】:

所以,我有这个方法,我需要调用一个外部 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。

【问题讨论】:

  • 如果在 php.ini 中启用了 url_fopen ,几乎所有的 php 文件函数都可以使用 url (我相信这是默认设置。它通常适用于我的所有安装)。所以 file_get_contents($url) 会返回一个字符串。
  • 行不通。该网址实际上是发送短信的短信网关。电话号码和短信文本作为参数提供。
  • 你也可以使用ajax。
  • 您能否详细说明“不起作用”的含义?为什么它不起作用?你试过什么没用?你尝试的时候有没有报错?为什么它是 SMS 网关会阻止它工作?如果 sms 网关只是一个等待请求的服务器,就像任何其他接受 http 请求的服务器一样(即使在不同的端口下),它应该可以工作。短信网关接受 curl 请求而不接受来自标准 php 的 http 请求有何不同?
  • @Jonathan Kuhn,好吧,我想我对仅与文件有关的函数名 file_get_contents 感到困惑。不过,事情仍然很奇怪,我猜我将参数传递给了错误的 url。就像这是 url 192.168.2.2:9090/send?num=100&txt=text 它正在与 file_get_contents() 一起使用,但是当我尝试修改提供变量的文本的值时,它会变得混乱并且我收到一个错误的请求错误(我也尝试了 urlencode)。我应该如何在这里传递变量 say $text 作为文本?

标签: php curl yii


【解决方案1】:

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

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

您需要对数据进行编码:

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

【讨论】:

  • @redGREENblue:就是这样。改用双引号 "。
  • 更换大括号或将大括号括在引号内,因为我都尝试了,但仍然无法正常工作。
  • 基本 PHP。不评估单引号中的 vars。如果您只是回显包含您发布的字符串的 var,您可以看到这一点。 $url = "192.168.2.2:9090/send?num={$num}&txt={$text}";
  • 哇,从来不知道,谢谢。不幸的是,它仍然无法正常工作。我还尝试在 url 上使用 urlencode(请参阅我的编辑),认为它可能会导致 url 格式错误,但仍然会出现错误的请求错误。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      但是不管有没有 curl,你都需要正确构建你的 url,urlencode 应该用在参数上,而不是用在 url 上:

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

      【讨论】:

        猜你喜欢
        • 2016-04-03
        • 1970-01-01
        • 2018-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-29
        相关资源
        最近更新 更多