开发者

How to perform HTTP 303 redirect with urllib2 in Python?

开发者 https://www.devze.com 2023-03-29 20:22 出处:网络
I have a URL to fetch, that gives a HTTP 303 redirect : import urllib2 as web import sys url=\'http://sample.com\'

I have a URL to fetch, that gives a HTTP 303 redirect :

import urllib2 as web
import sys

url='http://sample.com'

try: handle=web开发者_开发知识库.urlopen(url)
except web.HTTPError, e:
  print e.code
  sys.exit(1)
data=handle.read()
print 'Result :'
print data

So, the above code prints 303 as a result, it's a 303 redirect.

I want that it should follow the redirect and fetch me the HTML of the destination.

Edit

curl -I http://my303redirecturl.com/
HTTP/1.1 303 See Other
Date: Tue, 23 Aug 2011 04:53:53 IST
Server: Mule Core/3.1.2
Expires: Tue, 23 Aug 2011 04:53:53 IST
http.status: 303
Content-Type: application/json
MULE_ENCODING: UTF-8
Content-Length: 0
Connection: close

Will this help ?


urllib2 should follow 303 redirects by default. Use the following example to test:

import urllib2
url = 'http://phihag.de/2011/so/303/'
print(urllib2.urlopen(url).read())

If the above code prints out the content of example.net, but your URL doesn't, the URL in question is not resolving to a correct 303 redirect. If that is the case, you can use urllib2.build_opener to get an opener that uses your own implementation of BaseHandler instead of the default HTTPRedirectHandler.


This page provides a pretty good summary on how to handle HTTP redirects with urllib.

HTH

EDIT: The article shows how to retrieve the redirection URL, which can then be requested with another urlopen.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号