$ ls ~yifei/notes/

放弃 requests,拥抱 httpx

Posted on:

Last modified:

httpx 是新一代的 Python http 请求库,它几乎和 requests 的 API 无缝兼容,几乎不用改代码。 相对于 requests,有以下优点:

  • 支持 asyncio, 可以直接 async/await 啦
  • 支持 http 2, requests 一直都不支持
  • 实现了正确的 http 代理
  • Cookie 的 API 更友好
  • 有自己的网络连接池,requests 是基于第三方的 urllib3
  • 文档更有条理,更深入

另外,requests 有比较明显的内存泄漏,目前我还没有测试过 httpx,所以就不列到优点里了。

httpx 不支持在 client.request 中使用 proxies,必须在 Client 初始化时候指定,这样做应该是 考虑到链接池的实现。

httpx 可以直接 post json

httpx.post("http://example.com", json={"foo": "bar"})

httpx 可以直接按照字典设置和读取 cookies

httpx.post("http://example.com", cookies={"SESSION_ID": "foobar"})

r = httpx.get("http://example.com/login")
print(r.cookies["SESSION_ID"])

httpx 代理

httpx.get("http://example.com", proxies={"all://": "http://user:pass@proxy.com:8123"})

需要特别注意,所谓的https 代理,也是 http:// 开头的协议,不要被 requests 的错误概念搞蒙了

参考

  1. https://www.python-httpx.org
  2. https://github.com/requests/requests/issues/4601
  3. https://github.com/requests/requests/issues/1685
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 教程站