3

以前のコードでは、http: //en.wikipedia.org/wiki/M%C3%BCnsterという URL が表示されます。今、私はそれを要求したいのですが、それを行う方法がわかりません:

>>> requests.get('http://en.wikipedia.org/wiki/M%C3%BCnster')
<Response [400]>
>>> requests.get(urlparse.unquote('http://en.wikipedia.org/wiki/M%C3%BCnster'))
<Response [400]>
>>> requests.get(urlparse.unquote('http://en.wikipedia.org/wiki/M%C3%BCnster').decode('utf-8'))
<Response [400]>

問題は、リクエストが引用について過度に賢くしようとしていて、実際には次のことを要求していることです。

Request URI: /wiki/M%25C3%25BCnster
Request URI: /wiki/M%25C3%25BCnster
Request URI: /wiki/M%25C3%25BCnster

何か案は?

4

3 に答える 3

2

これはリクエストのエラーです。developブランチではすでに修正されています。https://github.com/kennethreitz/requests/pull/387を参照してください。

于 2012-02-14T10:31:44.263 に答える
2

カスタム User-Agent ヘッダーを使用した単純な urlparse.unquote は、その仕事をしているようです。

>>> s = 'http://en.wikipedia.org/wiki/M%C3%BCnster'
>>> import urllib2, urlparse
>>> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; rv:9.0.1) Gecko/20100101 Firefox/9.0.1'}
>>> url = urlparse.unquote(s)
>>> req = urllib2.Request(url, None, headers)
>>> resp = urllib2.urlopen(req)
>>> print resp.code
200
>>> data = resp.read()
>>> print 'The last outstanding palace of the German baroque period is created according to plans by Johann Conrad Schlaun.' in data
True

バイト文字列を Unicode オブジェクトにデコードしないでくださいUnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 11: ordinal not in range(128)。urlopen で発生します。

于 2012-02-14T01:01:14.400 に答える
1

を追加してみてください.decode('utf-8')

requests.get(urlparse.unquote('http://en.wikipedia.org/wiki/M%C3%BCnster').decode('utf-8'))
于 2012-02-13T21:12:03.987 に答える