发送一个 HTTP请求的过程
TCP建立链接
1.请求行= 请求方式(get/post) + URL+ HTTP/1.1 协议
2.请求头 request header
3.Request body
发送一个HTTP请求头
返回一个请求头的response
如果有request body
再次发送(第二次自动发送)request body
再接收一个request body的响应体
1.响应行 = HTTP/1.1 200响应码 OK描述
2.响应头 data-type contend-lens
3.响应体 data
Requests
Url =’’
Headers={}
Data = {}
Requests.get(url,headers,data)
Request.headers
Response.encoding=’utf8’
Response.headers
Response.text 直接文本信息
response.content 字节串内容
response.content.decode(‘utf8’) 如果乱码则使用解码utf8显示中文
Request中的 Session机制
Session =request.Session()
Session.post(url,headers,data)
这时使用的是同一个session,那么直接就可以把cookie的sessionid自动装入request header
Session.get(url,headers,data)
Request.get和 session.get方法一样
Response body:
Content-Type: application/json; charset=utf-8
Date: Mon, 11 Mar 2024 07:55:35 GMT
Content-Length: 1149
打印完整的HTTP消息
import requests
打印请求消息, 参数为 PreparedRequest 对象
def pretty_print_request(req):
if req.body == None:
msgBody = ''
else:
msgBody = req.body
print(
'{}\n{}\n{}\n\n{}'.format(
'\n\n----------- 发送请求 -----------',
req.method + ' ' + req.url,
'\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()),
msgBody,
))
打印响应消息
def pretty_print_response(res):
print(
'{}\nHTTP/1.1 {}\n{}\n\n{}'.format(
'\n\n----------- 得到响应 -----------',
res.status_code,
'\n'.join('{}: {}'.format(k, v) for k, v in res.headers.items()),
res.text,
))
req = requests.Request(
'post',
'http://www.baidu.com',
headers={
'head1':'value1',
'head2':'value2',
},
data={
'item1':'body-value1',
'item2':'body-value2',
})
session = requests.Session()
如果这样写 prepared = req.prepare()
后续发送会 请求消息头中,会丢掉session中的cookie数据
必须像下面这样写,才能让请求包含cookie数据
prepared = session.prepare_request(req)
pretty_print_request(prepared)
r = session.send(prepared)
pretty_print_response(r)