python request Session机制

本文详细介绍了发送HTTP请求的步骤,包括TCP连接建立、请求行和头部的构建,以及如何使用requests库中的Session机制处理cookies。通过实例展示了如何准备和发送请求,以及如何正确处理响应内容。
摘要由CSDN通过智能技术生成

发送一个 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值