当登录接口返回的cookies对象为RequestsCookieJar[]时,如何获取cookies呢?如下登录功能:
import requests import json header ={"User-Agent": "Chrome/75.0.3770.100","Content-Type": "application/json;charset=UTF-8"} login_url="http://xxx:8765/Index/index" login_data={"mobile_phone": "18684720xxx", "pwd": "12345678"} login_res = requests.request("post",login_url,data=json.dumps(login_data),headers=header) print("返回状态码",login_res) print("cookies",login_res.cookies)
请求结果为:
返回状态码 <Response [200]> cookies <RequestsCookieJar[<Cookie fengwoo=191jcmgj9os7vfr58h503p6oj6 for 120.78.128.25/>]>
cookies被存放到RequestsCookieJar[],cookie数据类型中,结构组成类似字典,是用<>和,组成,没有单引号和双引号。所以我们可以通过
RequestsCookieJar[cookie.key] =cookie.value的形式访问cookie。
思路:
先将cookies转化为字典,再将字典转化为字符串
# 使用utils.dict_from_cookiejar 将cookies数据类型转化为字典 cookies_dict = requests.utils.dict_from_cookiejar(login_res.cookies)
# 再使用 json.dumps 将字典转化为str字符串 cookies_str = json.dumps(cookies_dict)
#cookies获取,key="fengwoo" print(type(cookies_str),cookies_str) print(cookies_dict["fengwoo"])
请求结果为:
<class 'str'> {"fengwoo": "4va1ga0crtnajcg5illobi7ku4"} 4va1ga0crtnajcg5illobi7ku4
另外,如果将str字符串还原为cookies,思路与上面恰好相反:
先将字符串转化为字典,再将字典转化为cookies
# 使用json的loads函数,把str转化为字典。这里需要注意是loads,不是load cookies_dict = json.loads(cookies_str) # 再将字典恢复成原来的cookies cookies = requests.utils.cookiejar_from_dict(cookies_dict)