urllib2 Erreur HTTP 400: Bad Request
J'ai un morceau de code comme celui-ci
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)
et quand je l'ai saisie d'une requête de plus d'un mot comme "le chien", j'obtiens l'erreur suivante.
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
Quelqu'un peut-il préciser ce que im faire de mal?
Merci à l'avance.
- J'ai aussi reçu "urllib2.HTTPError: Erreur HTTP 406: Pas Acceptable" lors de la tentative de demande d'Url avec des espaces blancs.
Vous devez vous connecter pour publier un commentaire.
La raison que "le chien" renvoie une Erreur 400 est parce que vous n'êtes pas échapper à la chaîne pour une URL.
Si vous faites cela:
Il va travailler.
Cependant, je vous suggère fortement d'utiliser les demandes au lieu d'utiliser urllib/urllib2/httplib. Il est beaucoup plus facile et il va gérer tout cela pour vous.
C'est le même code python demandes:
Vous devez utiliser
urllib.quote()
sur votre "requête" de la variable:Cela ne l'URL nécessaire échapper à convertir l'espace en
big dog
àbig%20dog
.vous devez utiliser urllib.citation
J'ai aussi rencontré le même problème. S'avère que le problème était la méthode a été définie de façon inappropriée. Lorsque vous incluez urlencoded données dans urllib2.urlopen () la méthode doit être mis à la POSTE et quand vous l'exclure, la méthode GET. Alors, comment pouvez-vous définir la méthode est donnée ci-dessous:
Pour la requête POST
Pour OBTENIR la demande
Ceci permettra de définir votre url de la méthode de requête appropriée, la méthode requise