【问题标题】:How many ways does PHP have to open a URL with POST data?PHP 有多少种方法可以打开带有 POST 数据的 URL?
【发布时间】:2011-05-03 00:31:29
【问题描述】:

我正在编写一个 PHP 错误收集小部件,它从应用程序收集错误,然后通过向 URL 发出 POST 请求来报告它们。

有多少种不同的方法可以做到这一点,您将如何检测它们是否可用?在不同的服务器上可能没有安装扩展,安全选项可能被关闭,所以我想尽可能多地尝试。

  • CURL 为一;检查是否已安装的最佳方法是什么?
  • fopen() 如果有权限可以做 URL,但我认为你不能发送 POST 数据?
  • http://uk3.php.net/manual/en/book.http.php 貌似需要curl,所以还是直接用curl吧。
  • 可以使用PHP套接字,自己编写HTTP协议即可;有什么好的图书馆吗?

此服务在 BSD 许可下开源 BTW:http://elastik.sourceforge.net/

【问题讨论】:

  • 我认为这个 Q 应该是一个社区 wiki,因为没有一个正确的答案,但我不知道如何使它成为一个?
  • 标记它以引起版主注意,要求我们将其更改为 CW,如果你真的认为它应该是。

标签: php


【解决方案1】:

哦等等,看起来 fopen 可以包含 POST 数据:http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl

编辑:如果不稍加编辑,就无法从该 URL 获取代码,所以这是我的最终代码:

    if (ini_get('allow_url_fopen')) {
        $params = array('http' => array(
                'method' => 'POST',
                'content' => http_build_query($data),
                'header'=> "Content-type: application/x-www-form-urlencoded\r\n",
            ));
        $ctx = stream_context_create($params);
        $fp = fopen($url, 'rb', false, $ctx);
        if (!$fp) {
            print "FOPEN ERROR!";
            die();
        }
        fclose($fp);
    }

【讨论】:

    【解决方案2】:

    Zend_Http_Client 实现了四种不同的连接目标的方式,并且可以轻松扩展(当然您不需要使用完整的框架;)。

    【讨论】:

      【解决方案3】:

      要至少回答您的部分问题,您应该能够检测 curl 是否加载了extension_loaded()

      if (!extension_loaded('curl')) {
          # Yay curl!
      }
      

      【讨论】:

      • 谢谢!正是我想要的。
      【解决方案4】:

      Snoopy 是用于发出 HTTP 请求的流行且功能齐全的库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-29
        • 2016-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多