【问题标题】:PHP Warning: file_get_contents failed to open stream: HTTP request failed! HTTP/1.0 400 Bad RequestPHP 警告:file_get_contents 无法打开流:HTTP 请求失败! HTTP/1.0 400 错误请求
【发布时间】:2012-07-26 21:10:39
【问题描述】:

点击“http://Google.com”时出现以下错误“警告:file_get_contents 无法打开流:HTTP 请求失败!HTTP/1.0 400 错误请求”

 <?php
        $content = file_get_contents("http://www.google.com");
        if (strpos($http_response_header[0], "200")) { 
         echo "SUCCESS";
       } 
       else { 
              echo "FAILED";
            }
   ?>

由于这个问题,我无法解析 URL。我使用的是 WAMP(Apache 版本 2.2.22,PHP 版本 5.4.3)。

采取的步骤:- 1.allow_url_fopen 在php.ini中启用 2.尝试对 URL 进行编码 3.Even 使用 Curl php 函数遇到同样的问题。 4.允许防火墙开启

请帮忙。

【问题讨论】:

  • 可能他们阻止了那些明显的非浏览器用户代理。毕竟,您不应该使用 curl 或 php 来执行 google 搜索。即使 400 状态码很奇怪;在这种情况下,我希望是 403。
  • 顺便说一句,谷歌“根”URL 应为 http://www.google.com/,并带有斜杠。但同样,这不应该导致错误 400。

标签: php http


【解决方案1】:
$html = @file_get_html($url);   
if($html==FALSE) {
  echo 'error';
} else {
  echo 'success';
}

在这里检查一下 $url 是 www.google.com.then 你得到正确的结果

【讨论】:

    【解决方案2】:

    我和你有同样的问题。 我在 Windows 7 上使用 WAMP,直到最终找到解决方案。

    您需要确保取消注释 php.ini 文件中的 extension=php_openssl.dll

    C:\wamp\bin\php 文件夹。如果你通过 WAMP 服务器菜单 PHP >> PHP Extention 设置 openssl,它不会影响到 php.exe

    希望这对你也有用。

    【讨论】:

      【解决方案3】:

      这是因为它返回状态 302 (FOUND)

      echo $http_response_header[0]; // 返回 'HTTP/1.0 302 Found'

      【讨论】:

        【解决方案4】:

        某些服务器配置不允许使用file_get_contents(通过fopen)打开远程地址。 您可能想要更改配置,但他更喜欢使用 cURL 打开远程站点(更可靠且速度快 20 倍)的方法。

        可以在 PHP 文档 here 中找到一个快速简单的示例

        【讨论】:

          【解决方案5】:

          请求实际上成功了,你在 $content 中有页面。但是你对成功进行了错误的测试。 url 不返回 200,而是 302。

          【讨论】:

          • 我已经修改了代码并使用 302 作为错误但得到相同的结果“错误”
          • 好吧,转储那个特殊变量 $http_response_header 并重新考虑你的测试。
          猜你喜欢
          • 2012-12-31
          • 2022-10-02
          • 1970-01-01
          • 2017-08-07
          • 2012-04-08
          • 1970-01-01
          • 2011-05-31
          相关资源
          最近更新 更多