2017-02-03 27 views
1

urlをfirefoxやchromeで開くことはできますが、urllib2で開くことはできません。urllib2にいくつかのURLを開くことができませんが、まだブラウザで開くことができますか?

>>> 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 

非常に奇妙なURLですが、これをどのように修正できますか?

+0

で空白を交換してください。私は%20で空白を置き換え、それは働いた – thangtn

+0

ありがとう@yeputons!それはクッキーとは関係ありませんが、urllib2よりはるかに優れた要求です。ヘッダーがなくても直接この問題を解決します。リクエストがなぜこのようなURLで動作するのかについてさらに説明できる場合は、私はあなたの答えを受け入れるべきです。 – Wang

答えて

1

は、おそらく理由は、「1月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>> 
+1

はこれらの問題をすべて解決する要求を使用するだけです。再クエリーする必要があります( 'requests.utils.requote_uri')が、リクエストは自動的に行います。 – Wang

関連する問題