1. ホーム
  2. python

[解決済み] urllib2 HTTP エラー 400: 不正なリクエスト

2022-02-08 03:01:49

質問

次のようなコードがあります。

host = 'http://www.bing.com/search?q=%s&go=&qs=n&sk=&sc=8-13&first=%s' % (query, page)
req = urllib2.Request(host)
req.add_header('User-Agent', User_Agent)
response = urllib2.urlopen(req)

というように、1単語以上のクエリを入力すると、以下のようなエラーが発生します。

response = urllib2.urlopen(req)
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 400, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 438, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 521, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request

何が間違っているのか、どなたかご指摘ください。 ありがとうございます。

解決方法は?

the dog"が400 Errorを返すのは、URLの文字列をエスケープしていないためです。

このようにすると

import urllib, urllib2

quoted_query = urllib.quote(query)
host = 'http://www.bing.com/search?q=%s&go=&qs=n&sk=&sc=8-13&first=%s' % (quoted_query, page)
req = urllib2.Request(host)
req.add_header('User-Agent', User_Agent)
response = urllib2.urlopen(req)

動作するようになります。

しかし、私はあなたが使用することを強くお勧めします リクエスト urllib/urllib2/httplibを使うのではなく、urllib/urllib2/httplibを使います。その方がはるかに簡単で、あなたのためにこのすべてを処理してくれます。

これは同じコードをpythonのリクエストに使用したものです。

import requests

results = requests.get("http://www.bing.com/search", 
              params={'q': query, 'first': page}, 
              headers={'User-Agent': user_agent})