0

我有一个要获取的 url,它提供了 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

这会有帮助吗?

4

2 回答 2

3

默认情况下,urllib2 应该遵循 303 重定向。使用以下示例进行测试:

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

如果上面的代码打印出 example.net 的内容,但您的 URL 没有,则有问题的 URL 没有解析为正确的 303 重定向。如果是这种情况,您可以使用urllib2.build_opener来获取一个使用您自己的实现BaseHandler而不是 default 的开启器HTTPRedirectHandler

于 2011-08-23T10:33:53.227 回答
0

这个页面提供了一个关于如何使用 urllib 处理 HTTP 重定向的很好的总结。

高温高压

编辑:文章展示了如何检索重定向 URL,然后可以使用另一个urlopen.

于 2011-08-23T08:55:32.457 回答