python实现登录后获取cookie并用于之后的请求

初学python接口自动化,一些经验总结,希望遇到同样问题的小伙伴能较快解决:

依据项目的实现逻辑,用户发表评论时需检测用户当前为登录状态,即校验cookie。

用户登录后在响应头里可见到Set-cookie字段,此即可作为Cookie用于发表评论请求。

具体代码如下:

发表评论成功!

核心部分为:

session = requests.Session()

cookie_jar = session.post(url,data).cookies

cookie = requests.utils.dict_from_cookiejar(cookie_jar)

通过此方法获取登录响应头中的cookie,并以json格式输出。

-------------关键环节使用postman尝试---------------------

此前各种尝试一直失败(后面会提到过程中遇到的问题),具体是哪里出的问题一直不清晰,是传递的字段名,字段值,content-type不对还是哪里不对导致一直不成功。因为比对charles抓包分别是手动操作及使用python编码请求传递的参数略有不同。

比如,手动操作抓到的cookie值除了USER_SESSION部分,还有一段其他的数据,不知道从哪里获取的。content-type中手动操作的也会多一段charset=UTF-8。请求头中如果不用Cookie,以USER_SESSION为参数名传递是否可以,以及将USER_SESSION=xxxx以等号进行拆分,去掉等号作为参数传递是否可以等。均用postman加以验证。最后定位到传递的参数名必须是cookie,而且只要USER_SESSION=XXXX一部分即可。USER_SESSION也不能拆分。

--------------ps,此前走了些弯路---------------------

思考如何获取响应头中的cookie值,百度了下小伙伴有说使用requests.post(url,data).headers['set-cookie']的方法,确实得到了USER_SESSION值,但得到的是一个字符串格式。在发送评论request请求的时候,要求参数cookie必须是json格式,于是各种尝试,比如将header方法获取的cookie值硬拼接成json格式,cookie = {"cookie":"USER_SESSION=XXX获取到的session值"},确实成功了,IDE没有报错,但用Charles抓包发现传值的时候Cookie: cookie=USER_SESSION=XXX获取到的session值,又多了个cookie字段。导致请求不成功。

又换了种发表评论的时候以headers参数传值,然后charles抓包看到的请求数据又是USER_SESSION: USER_SESSION=XXXX。此时仿佛陷入了死循环。直到发现上述的方法。

你可能感兴趣的:(python实现登录后获取cookie并用于之后的请求)