如何在Python中使用urllib2执行HTTP 303重定向?
我有一个网址需要获取,它会返回一个 HTTP 303 重定向:
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
所以,上面的代码会输出 303
,这表示是一个 303 重定向。
我希望它能够跟随这个重定向,帮我获取目标页面的 HTML 内容。
编辑
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
这样做会有帮助吗?
2 个回答
0
3
urllib2 默认情况下应该会自动处理 303 重定向。你可以用下面的例子来测试一下:
import urllib2
url = 'http://phihag.de/2011/so/303/'
print(urllib2.urlopen(url).read())
如果上面的代码能打印出 example.net 的内容,但你的网址却不能,那说明你用的网址没有正确地指向一个 303 重定向。如果是这样的话,你可以使用 urllib2.build_opener
来创建一个打开器,这个打开器会使用你自己实现的 BaseHandler
,而不是默认的 HTTPRedirectHandler
。