什么是重定向
HTTP重定向:服务器无法处理浏览器发送过来的请求(request),服务器告诉浏览器跳转到可以处理请求的url上。(浏览器会自动访问该URL地址,以至于用户无法分辨是否重定向了。)
重定向的返回码3XX说明。Location响应首部包含了内容的新地址或是优选地址的URL。
状态码
301:在请求的URL已被移除时使用。响应的Location首部中应该包含资源现在所处的URL。
302:与301状态码类似,但是,客户端应该使用Location首部给出的URL来零食定位资源,将来的请求仍然使用老的URL。
测试
import urllib2
class RedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(self,req,fd,code,msg,headers):
print "301 OK!!"
def http_error_302(self,req,fd,code,msg,headers):
print "302 OK!!"
print headers
weibo = "http://www.weibo.com"
opener = urllib2.build_opener(RedirectHandler)
response = opener.open(weibo)
print response.geturl()
urllib2.install_opener(opener)
通过打开微博的地址,发现返回302的状态码,返回的首部为
Server: WeiBo
Date: Mon, 25 May 2015 08:09:21 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Mon, 25 May 2015 08:09:21 GMT
Pramga: no-cache
Cache-Control: no-cache, no-store
Location: http://passport.weibo.com/visitor/visitor?entry=miniblog&a=enter&url=http%3A%2F%2Fweibo.com%2F&domain=.weibo.com&ua=php-sso_sdk_client-0.6.11&_rand=1432541361.4673
DPOOL_HEADER: dagda26
Set-Cookie: YF-Ugrow-G0=57484c7c1ded49566c905773d5d00f82;Path=/
LB_HEADER: venus50
其中的Location为重定向的地址。将重定向的Location进行访问后返回200。