【问题标题】:how to do http get request in PHP without PECL_HTTP or CURL如何在没有 PECL_HTTP 或 CURL 的情况下在 PHP 中执行 http get 请求
【发布时间】:2012-06-06 13:30:44
【问题描述】:

我正在建立网站和域托管 (1&1) 仅提供基本 PHP 5.4(没有外部库,如 PECL_HTTP 或 CURL 等,没有安装的库)。

我可以将 PHP 类文件添加到我的代码中。我正在尝试在此 URL 上进行 Http/Https 获取 $url ="https://www.googleapis.com/freebase/v1/search?query=chocolate&count=2";

我已经尝试过 Snoopy,并且至少有 6 个来自 PHPClasses 的不同类库都没有返回任何内容(结果为空白),我不知道为什么?但它们都返回页面结果。

任何人都可以建议一个我可以包含的 PHP 类库(而不是任何已安装的库),它可以执行简单的 Http/Https 获取和返回结果。

【问题讨论】:

  • file_get_contents 不为你做这项工作吗?

标签: php http get


【解决方案1】:

完整的 http 功能(包括标头等)的最佳选择是使用带有流上下文的文件函数。

来自php.net

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
          "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);

$fp = fopen('http://www.example.com', 'r', false, $context);
fpassthru($fp);
fclose($fp)

【讨论】:

    【解决方案2】:

    如果你只想要这个“文件”的内容,你可以使用file_get_contents()(见第一个例子)。请参阅@OkekeEmmanuelOluchukwu 关于如何发送标头的评论。

    【讨论】:

    • 其实你可以发送headers,你只需要在file_get_contents()函数@prehfeldt中提供context参数
    【解决方案3】:

    您在寻找页面输出吗?

    您可能已经发现,include something.php?foo=bar 不起作用,因为 php 实际上会查找以 ?for=bar 结尾的文件,但您可以像这样设置所有 get 变量:

    function getRequest($url, $data) {
        foreach ($data as $key => $value) {
            $_GET[$key] = $value;
        }
        include $url;
    }
    

    但是,获取“完整路径”上的变量(想不出正确的名称)可以工作,例如include 'http://something.com/foo.php?bar=baz'。您可以在http://php.net/manual/en/function.include.php 找到“变量传递”的示例并在非本地系统上获取变量。

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 2020-04-29
      • 2019-06-26
      • 1970-01-01
      相关资源
      最近更新 更多