aiohttp 异步http请求-10.ClientSession自定义请求Cookie

网友投稿 272 2022-09-06


aiohttp 异步http请求-10.ClientSession自定义请求Cookie

前言

要将自己的 cookie 发送到服务器,可以使用构造函数的cookies 参数ClientSession

自定义cookie

cookie 定义成字典键值对格式,传参到ClientSession

url = '= {'cookies_are': 'working'}async with ClientSession(cookies=cookies) as session: async with session.get(url) as resp: assert await resp.json() == { "cookies": {"cookies_are": "working"}}

笔记

JSON 编码的正文返回请求 cookie。要访问会话 cookie,请参阅ClientSession.cookie_jar。

ClientSession可用于在多个请求之间共享 cookie:

async with aioas session: await session.get( ' filtered = session.cookie_jar.filter_cookies( ' assert filtered['my_cookie'].value == 'my_value' async with session.get('as r: json_body = await r.json() assert json_body['cookies']['my_cookie'] == 'my_value'

使用实例

以登录禅道网站为例,当我们第一次登录了禅道网站,浏览器关闭后,重新打开首页(非登录页),不需要再走登录流程。

像这种网站会记住登陆的cookies,并且在一段时间内都会有效(具体有效时长每个网站的失效时间不一样)

如果不想登录,可以打开登录之后的任意页面,找到请求标头里面的cookies这一栏,找到跟登录相关的cookie(需靠自己的经验了)。

zentaosid=6f8d76hvd1ugqip86ptolb0lm1

把cookie 写成字典格式键值对,多个cookie也可以

cookies = { "zentaosid": "2g5co7cgos0snikh0td9s4sha0" }

完整的代码

import aioasyncioasync def task(session): async with session.get(url='/zentao/my/') as resp: print(resp.status) res = await resp.text() print(res)async def main(): cookies = { "zentaosid": "2g5co7cgos0snikh0td9s4sha0" } base_url = " async with aio base_url=base_url, cookies=cookies) as session: await task(session)loop = asyncio.get_event_loop()loop.run_until_complete(main())

运行结果

200 我的地盘 - 禅道

从运行打印结果可以看到,是登录成功的页面。

ClientSession可用于在多个请求之间共享 cookie, 这就意味着只需在ClientSession传一次cookie,就可以在session会话里面访问当前网站的多个请求了。

获取session会话cookie

使用​​session.cookie_jar​​ 获取session对象的cookies

session.cookie_jar 返回一个可迭代对象len(session.cookie_jar) 获取cookie的个数cookie.key 获取cookie的key值cookie.value 获取cookie的value值cookie["domain"] 获取域名

async def main(): cookies = { "zentaosid": "2g5co7cgos0snikh0td9s4sha0" } base_url = " async with aio base_url=base_url, cookies=cookies) as session: print(session.cookie_jar) print(len(session.cookie_jar)) for cookie in session.cookie_jar: print(cookie) print(cookie.key) print(cookie.value) print(cookie["domain"]) await task(session)

运行结果

1Set-Cookie: zentaosid=2g5co7cgos0snikh0td9s4sha0; Path=/zentaosid2g5co7cgos0snikh0td9s4sha0

cookie_jar 里面还有几个常用的操作方法

filter_cookies ( request_url ) 返回 URL 可接受的 jar cookie 并在 Cookie标头中可用于发送给定 URL 的客户端请求。参数response_url(str) – 请求 cookie 的请求 URL。update_cookies ( cookies , response_url = None ) 更新服务器在标头中返回的 cookie Set-Cookieclear(predicate=None) 为None,则从jar中移除所有cookie。否则,只删除predicate(morsel)返回 True的.clear_domain(domain) 从 jar 中删除属于指定域或其子域的所有 cookie。

session会话更新cookie

ClientSession可用于在多个请求之间共享 cookie,我们可以在创建session会话的时候把cookie参数传进去

cookies = { "zentaosid": "2g5co7cgos0snikh0td9s4sha0" } base_url = " async with aio base_url=base_url, cookies=cookies) as session:

也可以在创建完会话,在session 对象上更新

cookies = { "zentaosid": "2g5co7cgos0snikh0td9s4sha0" } session.cookie_jar.update_cookies()


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:aiohttp 异步http请求-9.ClientSession自定义请求头部
下一篇:解决maven maven.compiler.source和maven.compiler.target的坑
相关文章

 发表评论

暂时没有评论,来抢沙发吧~