如何在Python中使用urllib2执行HTTP 303重定向?

0 投票
2 回答
1942 浏览
提问于 2025-04-17 00:10

我有一个网址需要获取,它会返回一个 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

这个页面对如何使用urllib处理HTTP重定向做了一个很好的总结。

希望对你有帮助。

编辑:这篇文章展示了如何获取重定向的URL,然后可以用另一个urlopen去请求这个URL。

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

撰写回答