By default calling a URL via urllib2
will follow any 30X
responses returned, often not what you want.
We can correct this behavior by adding a custom "opener" class to the urllib2
module like so:
import urllib
import urllib2
# install alternative handler to stop urllib2 from following redirects
class NoRedirectHandler(urllib2.HTTPRedirectHandler):
# alternative handler
def http_error_300(self,req,fp,code,msg,header_list):
data = urllib.addinfourl(fp,header_list,req.get_full_url())
data.status = code
data.code = code
return data
# setup aliases
http_error_301 = http_error_300
http_error_302 = http_error_300
http_error_303 = http_error_300
http_error_307 = http_error_300
urllib2.install_opener(
urllib2.build_opener(NoRedirectHandler())
)
And we're done!