今天介绍一下如何获取HTTP消息的请求头和响应头,请求头,顾名思义,就是包含在客户端发送给服务器的HTTP请求消息的头部,响应头包含在服务器响应客户端的请求消息的返回消息的头部。请求头中有客户端期望服务端该如何响应请求消息的信息,响应头中有服务端响应的方式,以下是通过HTTP请求百度服务的例子。
1、请求头
# -*- coding: utf-8 -*-
import requests #添加requests库
url = 'https://www.baidu.com' #将百度网址作为资源URL
r1 = requests.get(url) #向百度服务器发送get请求
r2 = requests.head(url) #向百度服务器发送head请求
r3 = requests.post(url) #向百度服务器发送post请求
r4 = requests.put(url) #向百度服务器发送put请求
print(r1.request.headers) #打印出get请求的请求头
print(r2.request.headers) #打印出head请求的请求头
print(r3.request.headers) #打印出post请求的请求头
print(r4.request.headers) #打印出put请求的请求头
各请求的请求头信息如下,信息以"键-值对"的形式展示。
上面请求头各项解释如下,还有很多其他请求头的选项,这里不一一解释了。
请求头 | 描述 | 参数内容 |
User-Agent | 告诉服务器,请求者的相关信息(版本号等信息) | 'ser-Agent' : 'Mozilla/5.0 (Linux; X11)' |
Accept-Encoding | 告诉服务器,客户端支持的数据压缩格式 | 'Accept-Encoding' : 'compress, gzip' |
Accept | 告诉服务器,客户端支持的数据类型 | 'Accept' : 'text/plain, text/html' |
Connection | 告诉服务器,处理完这次请求,是断开连接还是保持连接 | 'Connection' : 'close'或者'keep-alive' |
Content-Length | 告诉服务器,本次请求多长的数据 | 'Content-Length' : '348' |
2、响应头
import requests
url = 'https://www.baidu.com'
r1 = requests.get(url)
r2 = requests.head(url)
r3 = requests.post(url)
r4 = requests.put(url)
print(r1.headers) #打印出服务器响应get请求的响应头
print(r2.headers) #打印出服务器响应head请求的响应头
print(r3.headers) #打印出服务器响应post请求的响应头
print(r4.headers) #打印出服务器响应put请求的响应头
这样打印出来的内容太长,图片无法全部显示出来。
所以我们用dict()函数将响应头内容转化成字典格式,使用print()的升级版pprint()打印成竖行模式,比较美观,此时就需要import pprint库。
import requests
import pprint
url = 'https://www.baidu.com'
r1 = requests.get(url)
r2 = requests.head(url)
r3 = requests.post(url)
r4 = requests.put(url)
pp = pprint.PrettyPrinter(indent=2)
pp.pprint(dict(r1.headers))
pp.pprint(dict(r2.headers))
pp.pprint(dict(r3.headers))
pp.pprint(dict(r4.headers))
r1.headers和r2.headers内容如下,内容稍微有点儿差异。head()方法的请求头少了两项,毕竟head()本就是请求HTTP消息请求头的内容。
r3.header和r4.header内容一致。
上面响应头各项解释如下,响应头也还有许多其他选项。
响应头 | 描述 | 参数内容 |
Cache-Control | 告诉所有的缓存机制是否可以缓存及哪种类型 | 'Cache-Control' : 'no-cache' |
Connection | 处理完这次请求后,是断开连接还是继续保持连接 | 'Connection' : 'close'或者'keep-alive' |
Content-Encoding | web服务器支持的返回内容压缩编码类型 | 'Content-Encoding' : 'gzip' |
Content-Length | 服务器通过这个头告诉浏览器回送数据的长度 | 'Content-Length' : '348' |
Content-Type | 服务器通过这个头告诉浏览器回送数据的类型 | 'Content-Type' : 'text/html; charset=utf-8' |
Date | 返回响应消息的时间 | 'Date' : 'Tue, 15 Nov 2010 08:12:31 GMT' |
Last-Modified | 请求资源的最后修改时间 | 'Last-Modified' : 'Tue, 15 Nov 2010 12:45:26 GMT' |
Pragma | 包括实现特定的指令,它可应用到响应链上的任何接收方 | 'Pragma' : 'no-cache' |
Etag | 请求变量的实体标签的当前值 | 'ETag' : “737060cd8c284d8af7ad3082f209582d” |
Server | web服务器软件名称 | 'Server' : 'Apache/1.3.27 (Unix) (Red-Hat/Linux)' |
Set-Cookie | 设置Http Cookie | 'Set-Cookie' : 'UserID=JohnDoe; Max-Age=3600; Version=1' |
Transfer-Encoding | 文件传输编码 | 'Transfer-Encoding' : 'chunked' |
关于其他请求头和响应头选项的解释请戳这里https://www.cnblogs.com/unknows/p/8724872.html,这位博主写的很详细了,值得一看。