解决 requests cookies 为空的坑

转载请注明出处❤️

作者:测试蔡坨坨

原文链接:caituotuo.top/5d14f0d7.html


你好,我是测试蔡坨坨。

我们在做接口自动化测试的时候,一般会通过调用登录接口来获取cookies。

有时候,requests 返回的 cookies 会为空,原因是因为链接发生了 301/302 重定向跳转,而 cookies 是跟着第一个响应返回的,第二个响应没有返回 Set-Cookie header。所以直接读取 r.cookies 就是空的,但是在 session.cookies 中是有数据的。

这里提供两种解决方案。

方法1 关闭重定向

在请求参数中加入"allow_redirects": False关闭重定向。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def login(self):
req = {
"url": self.url + "/passport/login",
"method": "post",
"data": {
"username": self.username,
"password": self.password
},
"allow_redirects": False # 关闭重定向
}
res = requests.request(**req)
cookie_jar = res.cookies
print(cookie_jar)
cookie = requests.utils.dict_from_cookiejar(cookie_jar)
print(cookie)

方法2 直接读 s.cookies

1
2
3
4
5
6
7
8
9
10
11
12
13
def login(self):
url = self.url + "/passport/login"
data = {
"username": self.username,
"password": self.password
}
s = requests.Session()
s.post(url=url, data=data)
cookie_jar = s.cookies
print(cookie_jar)
cookies = requests.utils.dict_from_cookiejar(cookie_jar)
s.cookies.clear()
print(cookies)