HTTP响应码、响应头、网址、重定向

可以通过response对象的getcode()方法获得状态码,getheaders()方法获得响应头,geturl()方法获得网址。

例子1:

import socketimport urllib.requestimport urllib.error

socket.setdefaulttimeout(
5)

try:
    res = urllib.request.urlopen(
'https://cn.bing.com/?mkt=zh-CN',timeout=5)
   
# res = urllib.request.urlopen('https://www.google.com.hk/')
   
print(res.getcode())  # 响应状态码
   
print(res.getheaders())  # 响应头
   
print(res.geturl())  # 网址except socket.timeout:
   
print('请求超时')

结果:

HTTP响应码、响应头、网址、重定向_状态码

例子2:

HTTP的302状态码是临时重定向状态码表明请求的资源被暂时的移动到了由该 HTTP 响应的响应头 Location 指定的 URL 上。浏览器会重定向到这个 URL,但是搜索引擎不会对该资源的链接进行更新 ;而301是永久重定向状态码搜索引擎会更新该资源的链接。

HTTP1.1之后出现了303、307、308都是重定向状态码,其中303允许在重定向时改变请求方法但是禁止被缓存,307和308不允许重定向时改变请求方法。

如何判断是否出现重定向了?

可以通过检查response的url和request的url是否一致即可。

import socketimport urllib.requestimport urllib.error


try:
   
# res = urllib.request.urlopen('https://cn.bing.com/?mkt=zh-CN',timeout=5)
   
res = urllib.request.urlopen('https://www.ali213.net/',timeout=5)
   
print(res.getcode()) 
# 响应状态码
   
isRedirected = res.geturl() == 'https://www.ali213.net/'
   
print(isRedirected)except socket.timeout:
   
print('请求超时')

结果:

HTTP响应码、响应头、网址、重定向_状态码_02