【问题标题】:open url from pythonanywhere从 pythonanywhere 打开 url
【发布时间】:2015-12-12 09:04:57
【问题描述】:

这段代码在我的本地机器上运行良好,但是当我在 pythonanywhere.com 上上传并运行它时,它给了我这个错误。
我的代码:

url = "http://www.codeforces.com/api/contest.list?gym=false"
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
                'Accept-Encoding': 'none',
                'Accept-Language': 'en-US,en;q=0.8',
                'Connection': 'keep-alive'}
         req = urllib2.Request(url, headers=hdr)
         opener = urllib2.build_opener()
         openedReq = opener.open(req, timeout=300)

错误:

Traceback (most recent call last):
File "/home/GehadAbdallah/main.py", line 135, in openApi
    openedReq = opener.open(req, timeout=300)
  File "/usr/lib/python2.7/urllib2.py", line 410, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden

附:我正在研究 python 2.7

【问题讨论】:

  • 你看不懂错误吗?它是 403 禁止的。 Pythonanywhere.com 停止任何传出连接。 (也许只有 http 的,但仍然)
  • @Ronnie 我应该怎么做才能启用传出连接?
  • 我不知道。我不知道他们的政策。联系他们并要求他们启用。防火墙阻止了你,没有它,你不能。看,这种类型的问题不是一个合适的编程问题。我们不关心/不知道你的目标机器,你甚至不知道目标机器。
  • 好的,打扰了。
  • 发帖前请检查常见问题

标签: python urllib2 pythonanywhere


【解决方案1】:

PythonAnywhere 上的免费帐户仅限于 whitelist 的网站,仅限 http/https,并且通过代理进行访问。这里有更多信息:

PythonAnywhere wiki: "why do I get a 403 forbidden error when opening a url?"

【讨论】:

    【解决方案2】:

    我最近在 pythonanywhere 上使用 urllib2 和一个烧瓶项目,使用他们的免费帐户访问donorschoose.org 上的 api

    这可能会有所帮助,

    @app.route('/funding')
    def fundingByState():
        urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler({'http': 'proxy.server:3128'})))
        donors_choose_url = "http://api.donorschoose.org/common/json_feed.html?historical=true&APIKey=DONORSCHOOSE"
        response = urllib2.urlopen(donors_choose_url)
        json_response = json.load(response)
        return json.dumps(json_response)
    

    这确实有效。

    【讨论】:

      【解决方案3】:

      如果您使用的是付费帐户,但仍然收到此错误消息 试试这个pythonanywhere_forums

      对我来说,我必须删除控制台然后重新启动一个新的。

      【讨论】:

        猜你喜欢
        • 2015-01-31
        • 2015-03-19
        • 1970-01-01
        • 1970-01-01
        • 2013-02-10
        • 2019-07-23
        • 2020-11-06
        • 1970-01-01
        相关资源
        最近更新 更多