ejemplos python urllib2 http-error

python - ejemplos - urllib2 HTTP Error 400: Solicitud incorrecta



urllib2.urlopen timeout (4)

La razón por la que "el perro" devuelve un error 400 es porque no estás escapando de la cadena a una URL.

Si haces esto:

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)

Funcionará.

Sin embargo, le sugiero que utilice las requests lugar de utilizar urllib / urllib2 / httplib. Es mucho más fácil y manejará todo esto por ti.

Este es el mismo código con las solicitudes de python:

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

Tengo un pedazo de código como este

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)

y cuando ingreso una consulta mayor a una palabra como "el perro", aparece el siguiente error.

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

¿Alguien puede señalar lo que estoy haciendo mal? Gracias por adelantado.


También me encontré con el mismo problema. Resulta que el problema fue que el método se estableció de manera inadecuada. Cuando incluyes datos urlencoded en urllib2.urlopen (), el método debe establecerse en POST y cuando lo excluyas, el método debería ser GET. Entonces, ¿cómo se establece el método se da a continuación:

Para solicitud POST

request_object = urllib2.Request(url) method = ("POST", "GET") request_object.get_method = lambda: method[0] #If method is set to POST url_handle = opener.open(req, data) #If method is set to POST

Para solicitud GET

request_object = urllib2.Request(url) method = ("POST", "GET") request_object.get_method = lambda: method[1] #If method is set to GET url_handle = opener.open(req) #If method is set to GET

Esto establecerá su método de solicitud de url al método requerido apropiado



urllib.quote() usar urllib.quote() en su variable de ''consulta'':

query = urllib.quote(query) host = ''http://www.bing.com/search?q=%s&go=&qs=n&sk=&sc=8-13&first=%s'' % (query, page)

Esto hace que la URL necesaria se escape para convertir el espacio en big dog a big%20dog .