【问题标题】:Python urllib2.urlopen returns a HTTP error 503 [closed]Python urllib2.urlopen 返回 HTTP 错误 503 [关闭]
【发布时间】:2015-02-05 22:18:24
【问题描述】:

在这里你可以看到我的代码 sn-p。由于 3 天它不再工作。 我的 python 在 Ubuntu 10.04.4 LTS 下运行。 Python 版本为 2.6.5。

#!/usr/bin/env python
import urllib2 as ur
...
webpage = []

site = "http://www.gametracker.com/server_info/94.250.218.247:25200/top_players/"
hdr =  {'User-Agent': 'Mozilla/5.0'}
req = ur.Request(site , headers=hdr)
data = ur.urlopen(req)
for line in data:
    line = line.split(",")
    webpage.append(line)
...

这里是返回的Error-msg

Traceback (most recent call last):

File "read_top5.py", line 21, in <module>
  data = ur.urlopen(req)
File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
  return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 397, in open
  response = meth(req, response)
File "/usr/lib/python2.6/urllib2.py", line 510, in http_response
  'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.6/urllib2.py", line 435, in error
  return self._call_chain(*args)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
  result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 518, in http_error_default
  raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 503: Service Temporarily Unavailable

【问题讨论】:

  • 这个问题似乎是题外话,因为它是关于服务的可用性而不是编程。
  • 顺便说一下,使用requests。 Waaaaaay 更好的 API 来触发网络请求。

标签: python urllib2 urlopen


【解决方案1】:

该服务当前不工作。 curl:

curl -i "http://www.gametracker.com/server_info/94.250.218.247:25200/top_players/"

也返回一个 503:

HTTP/1.1 503 Service Temporarily Unavailable
Date: Mon, 08 Dec 2014 09:37:17 GMT
Content-Type: text/html; charset=UTF-8
Server: cloudflare-nginx

该服务使用 CloudFlare,它提供了一个form of DDoS protection,要求您使用完整的网络浏览器进行连接。

尽管您可能会解决这个问题,但通过决定使用此服务,站点运营商会声明他们不希望您使用脚本进行连接。

这不是编程问题;您需要确定该服务对脚本不可用的原因。

【讨论】:

  • 如果我使用浏览器访问该网站,它目前正在工作。
  • CloudFlare...现在说得通了...谢谢...我得自己看,真丢人...
【解决方案2】:

这只是网站所做的事情。它似乎是某种反 DDoS 系统的一部分。为什么返回 503 令人费解,但绝对是网站本身。

我尝试了上面的curl 命令Joe,这是我得到的回复:

HTTP/1.1 503 Service Temporarily Unavailable
Date: Mon, 08 Dec 2014 09:47:41 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid=d32f001037fafc1363bf86d29be0baf921418032061; expires=Tue, 08-Dec-15 09:47:41 GMT; path=/; domain=.gametracker.com; HttpOnly
X-Frame-Options: SAMEORIGIN
Cache-Control: no-cache
Server: cloudflare-nginx
CF-RAY: 19580b02d7c70f21-IAD

<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8" />
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
  <meta name="robots" content="noindex, nofollow" />
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  <title>Just a moment...</title>
  <style type="text/css">
    html, body {width: 100%; height: 100%; margin: 0; padding: 0;}
    body {background-color: #ffffff; font-family: Helvetica, Arial, sans-serif; font-size: 100%;}
    h1 {font-size: 1.5em; color: #404040; text-align: center;}
    p {font-size: 1em; color: #404040; text-align: center; margin: 10px 0 0 0;}
    #spinner {margin: 0 auto 30px auto; display: block;}
    .attribution {margin-top: 20px;}
  </style>

    <script type="text/javascript">
  //<![CDATA[
  (function(){
    var a = function() {try{return !!window.addEventListener} catch(e) {return !1} },
    b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)};
    b(function(){
      var a = document.getElementById('cf-content');a.style.display = 'block';
      setTimeout(function(){
        var t,r,a,f, sdDUenl={"xRvHG":+((!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]))};
        t = document.createElement('div');
        t.innerHTML="<a href='/'>x</a>";
        t = t.firstChild.href;r = t.match(/https?:\/\//)[0];
        t = t.substr(r.length); t = t.substr(0,t.length-1);
        a = document.getElementById('jschl-answer');
        f = document.getElementById('challenge-form');
        ;sdDUenl.xRvHG*=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]));sdDUenl.xRvHG-=+((!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]));sdDUenl.xRvHG+=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]));sdDUenl.xRvHG*=+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]));sdDUenl.xRvHG-=+((!+[]+!![]+!![]+!![]+!![]+[])+(+[]));sdDUenl.xRvHG-=+((!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]));sdDUenl.xRvHG*=+((!+[]+!![]+[])+(!+[]+!![]+!![]+!![]));sdDUenl.xRvHG-=+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]));sdDUenl.xRvHG*=+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]));sdDUenl.xRvHG+=+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));a.value = parseInt(sdDUenl.xRvHG, 10) + t.length;
        f.submit();
      }, 5850);
    }, false);
  })();
  //]]>
</script>


</head>
<body>
  <table width="100%" height="100%" cellpadding="20">
    <tr>
      <td align="center" valign="middle">
          <div class="cf-browser-verification cf-im-under-attack">
  <noscript><h1 data-translate="turn_on_js" style="color:#bd2426;">Please turn JavaScript on and reload the page.</h1></noscript>
  <div id="cf-content" style="display:none">
    <img id="spinner" src="/cdn-cgi/images/spinner-2013.gif" />
    <h1><span data-translate="checking_browser">Checking your browser before accessing</span> gametracker.com.</h1>
    <p data-translate="process_is_automatic">This process is automatic. Your browser will redirect to your requested content shortly.</p>
    <p data-translate="allow_5_secs">Please allow up to 5 seconds&hellip;</p>
  </div>
  <form id="challenge-form" action="/cdn-cgi/l/chk_jschl" method="get">
    <input type="hidden" name="jschl_vc" value="3cecd7cab5d69708a3b1081e462824d0"/>
    <input type="hidden" id="jschl-answer" name="jschl_answer"/>
  </form>
</div>


          <div class="attribution"><a href="http://www.cloudflare.com/" target="_blank" style="font-size: 12px;">DDoS protection by CloudFlare</a></div>
      </td>
    </tr>
  </table>
</body>
</html>

请注意,正文包含内容,尽管是 503 状态代码。这实际上与我尝试在浏览器中访问页面时看到的一致。首先,我被发送到您在上面的响应中看到的这个“反 DDoS”页面,然后我被自动重定向到 URL 中请求的页面(显然是通过 JavaScript)。这解释了为什么它在浏览器之外的行为不像您期望的那样; Python Web 请求不会执行 JavaScript 来执行重定向。

所以这绝对是服务。您必须咨询制作它的人,以了解他们希望您处理它的原因和方式。您可能想查看它们是否有不同的 API 调用端点,或者如果您设置 Accept 标头,端点可能会做出不同的响应。 (application/json 可用于表示您想要返回 JSON。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2011-12-23
    相关资源
    最近更新 更多