【问题标题】:HTTP request failed! HTTP/1.1 503 Service Temporarily UnavailableHTTP 请求失败! HTTP/1.1 503 服务暂时不可用
【发布时间】:2013-06-08 08:19:53
【问题描述】:

我正在使用函数 file_get_contents 从网页获取内容。 一些网站运行良好,但大多数都给我这个错误

failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable

这是我的简单代码

echo file_get_contents("url");

当我在浏览器中运行这个 url 时它工作正常。可能是什么问题?

【问题讨论】:

  • 您可能没有必需的请求标头来接收有效响应。
  • 这是什么意思?我能做什么?这些网站不能做吗?

标签: php file-get-contents


【解决方案1】:

503 表示功能正在运行,并且您从远程服务器获得拒绝您的响应。如果您曾经尝试对谷歌结果进行 cURL 搜索,同样的事情也会发生,因为他们可以检测到 file_get_contents 和 cURL 使用的用户代理,从而阻止这些用户代理。您正在访问的服务器也有可能将其 IP 地址列入黑名单以进行此类做法。

这些命令无法像远程情况下的浏览器一样工作的主要三个常见原因。

1) The default USER-AGENT has been blocked.
2) Your server's IP block has been blocked.
3) Remote host has a proxy detection. 

【讨论】:

  • 我已经更新了我的答案,顺便说一句,您尝试访问的网址是否有可能是 https 网址?
  • 我不太了解,让我给你举个例子......试试这个网站你会看到......dubai.dubizzle.com
  • 我也用 CURL 检查了那个 url,他们保留了一些重定向脚本来防止代理或一些外部访问。所以你不能用 file_get_contents 甚至用 cURL 访问这个 URL。
  • 这是我的 curl 代码,$ch = curl_init(); $超时= 5; curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); $data = curl_exec($ch); if(!curl_errno($ch)){ echo $data; }else{ echo '卷曲错误:' . curl_error($ch); } curl_close($ch);
  • 我该怎么做才能使用这样的网站?解决方案是什么
【解决方案2】:

有了这个脚本,所有网站都认为你是浏览器:

<?php
$url='http://mywebsite.com'
$ch = curl_init();
     $user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0';
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
          curl_setopt($ch, CURLOPT_AUTOREFERER, false);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);

        curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSLVERSION,CURL_SSLVERSION_DEFAULT);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $webcontent= curl_exec ($ch);
        $error = curl_error($ch); 
        curl_close ($ch);
?>

【讨论】:

  • 并不是万无一失的。如果您提出太多请求,即使使用浏览器用户代理字符串,Google 也会拒绝该请求。我试图从每个 cURL 的不同字符串数组中随机选择,但为时已晚。我只希望它在一定时间后重置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多