解决 requests cookies 为空的坑

转载请注明出处❤️

作者:测试蔡坨坨

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


你好,我是测试蔡坨坨。

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

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

这里提供两种解决方案。

方法1 关闭重定向

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

    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

    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)

posted @ 2023-01-18 01:02  测试蔡坨坨  阅读(2859)  评论(0编辑  收藏  举报