requests headers python python-3.x urllib

headers - urllib python 3 put



Python 3.4 urllib.request error(http 403) (2)

Aquí hay algunas notas que reuní en urllib cuando estaba estudiando python-3:
Los guardé en caso de que pudieran ser útiles o ayudar a alguien más.

Cómo importar urllib.request y urllib.parse :

import urllib.request as urlRequest import urllib.parse as urlParse

Cómo hacer una solicitud GET:

url = "http://www.example.net" # open the url x = urlRequest.urlopen(url) # get the source code sourceCode = x.read()

Cómo hacer una solicitud POST:

url = "https://www.example.com" values = {"q": "python if"} # encode values for the url values = urlParse.urlencode(values) # encode the values in UTF-8 format values = values.encode("UTF-8") # create the url targetUrl = urlRequest.Request(url, values) # open the url x = urlRequest.urlopen(targetUrl) # get the source code sourceCode = x.read()

Cómo hacer una solicitud POST ( 403 forbidden respuestas 403 forbidden ):

url = "https://www.example.com" values = {"q": "python urllib"} # pretend to be a chrome 47 browser on a windows 10 machine headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"} # encode values for the url values = urlParse.urlencode(values) # encode the values in UTF-8 format values = values.encode("UTF-8") # create the url targetUrl = urlRequest.Request(url = url, data = values, headers = headers) # open the url x = urlRequest.urlopen(targetUrl) # get the source code sourceCode = x.read()

Cómo hacer una solicitud GET ( 403 forbidden respuestas 403 forbidden ):

url = "https://www.example.com" # pretend to be a chrome 47 browser on a windows 10 machine headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"} req = urlRequest.Request(url, headers = headers) # open the url x = urlRequest.urlopen(req) # get the source code sourceCode = x.read()

Estoy tratando de abrir y analizar una página html. En Python 2.7.8 no tengo ningún problema:

import urllib url = "https://ipdb.at/ip/66.196.116.112" html = urllib.urlopen(url).read()

y todo está bien. Sin embargo, quiero pasar a Python 3.4 y allí obtengo el error 403 de HTTP (Prohibido). Mi código:

import urllib.request html = urllib.request.urlopen(url) # same URL as before File "C:/Python34/lib/urllib/request.py", line 153, in urlopen return opener.open(url, data, timeout) File "C:/Python34/lib/urllib/request.py", line 461, in open response = meth(req, response) File "C:/Python34/lib/urllib/request.py", line 574, in http_response ''http'', request, response, code, msg, hdrs) File "C:/Python34/lib/urllib/request.py", line 499, in error return self._call_chain(*args) File "C:/Python34/lib/urllib/request.py", line 433, in _call_chain result = func(*args) File "C:/Python34/lib/urllib/request.py", line 582, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbidden

Funciona para otras URL que no utilizan https.

url = ''http://www.stopforumspam.com/ipcheck/212.91.188.166''

esta bien


Parece que al sitio no le gusta el agente de usuario de Python 3.x.

Especificar User-Agent resolverá su problema:

import urllib.request req = urllib.request.Request(url, headers={''User-Agent'': ''Mozilla/5.0''}) html = urllib.request.urlopen(req).read()

NOTA La versión de Python 2.x urllib también recibe el estado 403, pero a diferencia de Python 2.x urllib2 y Python 3.x urllib, no genera la excepción.

Puedes confirmarlo mediante el siguiente código:

print(urllib.urlopen(url).getcode()) # => 403