$ ls ~yifei/notes/

requests cookies 为空的一个坑

Posted on:

Last modified:

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

解决方法是直接读 s.cookies。

s = requests.Session()
r = s.get("http://httpbin.org/cookies/set?foo=bar")
cookies = requests.utils.dict_from_cookiejar(s.cookies)
s.cookies.clear()

不过需要注意的是如果在多线程环境中使用 session 需要注意锁的问题,建议把 session 设置成 thread local 的类型。

不要用 requests,有严重的内存泄漏问题:

  1. https://github.com/requests/requests/issues/4601
  2. https://github.com/requests/requests/issues/1685

Requests 还有严重的性能问题,每次请求竟然都会做一次 DNS 查询

  1. https://stackoverflow.com/questions/39435443/why-is-python-3-http-client-so-much-faster-than-python-requests
WeChat Qr Code

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.

友情链接: MySQL 教程站