Skip to content Skip to sidebar Skip to footer

Python3: Http Error 302 While Using Urllib

I want to read the value of different stocks from websites. Therefore I wrote this tiny script, which reads the page source and then parses out the value: stock_reader.py #!/usr/bi

Solution 1:

This happens probably because the destination site uses cookies and redirect you in case you don't send cookies.

What you can use is something like that :

from http.cookiejar import CookieJar

url = "http://www.tradegate.de/orderbuch.php?isin=CH0012138530"

req = urllib.request.Request(url, None, {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3','Accept-Encoding': 'gzip, deflate, sdch','Accept-Language': 'en-US,en;q=0.8','Connection': 'keep-alive'})

cj = CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
response = opener.open(req)
response.read()

This way, you support Cookies and website will allow you to get the page :-)

Another way would be to use the requests package which is really simplest to use. In your case, it would lead to :

import requests

url = "http://www.tradegate.de/orderbuch.php?isin=CH0012138530"
r = requests.get(url, headers={'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'}, timeout=15)
print(r.content)

Solution 2:

This answer is a simplification of the one by Cédric J. You don't really need to import CookieJar or set various Accept headers if you don't want to. You should however generally set a timeout. It is tested with Python 3.7. I would typically remember to use a new opener for each random URL that I want cookies for.

from urllib.request import build_opener, HTTPCookieProcessor, Requesturl='https://www.cell.com/cell-metabolism/fulltext/S1550-4131(18)30630-2'
opener = build_opener(HTTPCookieProcessor())

Without a Request object:

response = opener.open(url, timeout=30)
content = response.read()

With a Request object:

request = Request(url)
response = opener.open(request, timeout=30)
content = response.read()

Solution 3:

HTTP Status code 302 it's a kind of a redirect, it will have a header with a new URL for access (Not necessary a working URL..)

Location: http://www.example.com/x/y/

This is quite often used to block bots who make to many requests in too of a short time frame. So not an coding problem.

Post a Comment for "Python3: Http Error 302 While Using Urllib"