03. 请求头和Cookie设置
2024年10月28日大约 4 分钟
03. 请求头和Cookie设置
1. 请求头
思考:ihrm系统员工模块接口请求头如何设置?
import requests
# 定义请求头
headers = {
"key1":"value1",
"key2":"value2",
"Authorization":"Bearer 4c51c601-c3f7-4d1a-a738-7848f2439f45""
}
resp = requests.put(
url="http://ihrm-java.ithiema.net/api/sys/user/1467780995754229760",
headers=headers,
# headers={"Authorization": "Bearer 4c51c601-c3f7-4d1a-a738-7848f2439f45"},
json={"username": "齐天大圣"})
print(resp.json())
2. Cookie
- Cookie简介
- 工程师针对http协议是无连接、无状态特性,设计的一种技术。可以在浏览器端存储用户的信息。
- Cookie特性
- cookie 用于存储用户临时的不敏感信息
- cookie 位于浏览器(客户端)端。默认大小 4k(可以调整)
- cookie 中的数据,可以随意被访问,没有安全性可言。
- cookie 中存储的数据类型, 受浏览器限制。
- 在计算机中,认证用户身份的方式有多种!课程中接触 2种:
- ihrm项目:token认证。
- tpshop项目:cookie+Session认证。
完整实现 TPshop商城登录,并获取 “我的订单” 页面数据。
获取验证码:http://192.168.10.31:9003/index.php?m=Home&c=User&a=verify
登录:http://192.168.10.31:9003/index.php?m=Home&c=User&a=do_login
我的订单:http://192.168.10.31:9003/Home/Order/order_list.html
import requests
import config
# 发送获取验证码请求
resp_v = requests.get(url=config.BASE_URL_MALL + "/index.php?m=Home&c=User&a=verify&r=0.21519623710645064")
# 从获取验证码的响应结果,提取 cookie
my_cookie = resp_v.cookies
print(f'my_cookie = {my_cookie}')
print(f'resp_v.text = {resp_v.text}')
# 发送登录请求url、请求头、请求体。 携带cookie。 得响应结果
resp = requests.post(
url=config.BASE_URL_MALL + "/index.php?m=Home&c=User&a=do_login&t=0.7094195931397276",
headers={"Content-Type": "application/x-www-form-urlencoded"},
data={"username": "13800138006", "password": "123456", "verify_code": "8888"},
cookies=my_cookie
)
# 打印响应结果
print(f'resp.json() = {resp.json()}')
# 发送 查看我的订单 请求
resp_o = requests.get(url=config.BASE_URL_MALL + "/Home/Order/order_list.html", cookies=my_cookie)
print(resp_o.text)
3. Session ☆
1. Session简介
Session也叫会话。通常出现在网络通信中,从客户端借助访问终端登录上服务器,直到退出登录所产生的通信数据,保存在会话中。
Session对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开
会话能让我们在跨请求时候保持某些参数,比如在同一个Session实例发出的所有请求之间保持cookie
特性
- Session 用于存储用户的信息
- Session 位于服务端。大小直接使用服务器存储空间
- Session 中的数据,不能随意被访问,安全性较高
- Session 中存储的数据类型,受服务器影响,几乎能支持所有的数据类型
2.Session自动管理Cookie
因为 Cookie 中的数据,都是 Session 传递的。因此,Session可以直接自动管理 cookie
Session对象发送请求
- 创建session对象*:session = requests.Session()
3. 案例
借助session重新实现上述TPshop商城登录,并获取 “我的订单” 页面数据。
实现步骤
- 创建一个 Session 实例
- 使用Session实例,调get方法,发送获取验证码请求。(不需要获取cookie)
- 使用同一个Session实例,调用post方法,发送登录请求。(不需要携带 cookie)
- 使用同一个Session实例,调用get方法,发送查看我的订单请求。(不需要携带 cookie)
import requests
import config
# 1. 创建一个 Session 实例。
session = requests.Session()
# 2. 使用Session实例,调get方法,发送获取验证码请求。(不需要获取cookie)
resp_v = session.get(url=config.BASE_URL_MALL + "/index.php?m=Home&c=User&a=verify&r=0.21519623710645064")
# 3. 使用同一个Session实例,调用post方法,发送登录请求。(不需要携带cookie)
resp = session.post(
url=config.BASE_URL_MALL + "/index.php?m=Home&c=User&a=do_login&t=0.7094195931397276",
data={"username": "13800138006", "password": "123456", "verify_code": "8888"},
)
print(resp.json())
# 4. 使用同一个Session实例,调用get方法,发送查看我的订单请求。(不需要携带cookie)
resp_o = session.get(url=config.BASE_URL_MALL + "/Home/Order/order_list.html")
print(resp_o.text)
4. 面试题 Cookie 和 Session 区别
1. 数据存储位置:
cookie存储在浏览器;session存储在服务器。
2. 安全性:
cookie中的数据可以随意获取,没有安全性可言。
Session的数据多为加密存储,安全较高!
3. 数据类型:
cookie支持的数据类型受浏览器限制,较少;
Session直接使用服务器存储,支持所有数据类型
4. 大小:
cookie大小默认4k;
Session大小约为服务器存储空间大小