【问题标题】:unable to open some url in urllib2 which can still be openned in browsers? [duplicate]无法在 urllib2 中打开一些仍然可以在浏览器中打开的 url? [复制]
【发布时间】:2023-12-16 23:25:01
【问题描述】:

我可以在 firefox 或 chrome 中打开这个 url,但我无法使用 urllib2 打开它。

>>> req = urllib2.Request(r"http://ratedata.gaincapital.com/2014/.\01 January", headers={'User-Agent' : "Mozilla/5.1"})
>>> urllib2.urlopen(req)

Traceback (most recent call last):
  File "<pyshell#134>", line 1, in <module>
    urllib2.urlopen(req)
  File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  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)
HTTPError: HTTP Error 400: Bad Request

非常奇怪的网址,但我该如何解决?

【问题讨论】:

  • 可能是因为“01 January”中的空白。我用 %20 替换了空格,它起作用了
  • 谢谢@yeputons!它与 cookie 无关,但请求绝对比 urllib2 好得多它只是直接解决了这个问题,即使没有标头。如果您可以进一步解释为什么请求可以使用这样的 url,我应该接受您的回答。

标签: python urllib2


【解决方案1】:

%20替换空格

>>> req = urllib2.Request(r"http://ratedata.gaincapital.com/2014/.\01%20January", headers={'User-Agent' : "Mozilla/5.1"})
>>> urllib2.urlopen(req)
<addinfourl at 139708797193896 whose fp = <socket._fileobject object at 0x7f10820eb2d0>>

【讨论】:

  • 只需使用请求来解决所有这些问题。它需要重新引用 (requests.utils.requote_uri),但请求会自动执行。
最近更新 更多