HTTPX是一个功能强大的Python 3 HTTP客户端库,它集成了命令行客户端,支持HTTP/1.1和HTTP/2,并提供同步和异步API。本文将详细介绍HTTPX的特性、使用方法以及打包发布流程。
一、 HTTPX的核心特性
HTTPX的设计目标是成为一个现代化的、功能全面的HTTP客户端,它在易用性、性能和功能方面都进行了优化。其核心特性包括:
• Requests兼容的API: HTTPX的API设计与广受欢迎的
requests
库高度兼容,这使得从requests
迁移到HTTPX变得非常容易,减少了学习成本。• 集成命令行客户端: HTTPX自带一个方便的命令行工具,允许用户直接从命令行发送HTTP请求,无需编写Python代码。这对于快速测试和简单的HTTP交互非常有用。安装命令行客户端需要使用
pip install 'httpx[cli]'
。• HTTP/1.1和HTTP/2支持: HTTPX同时支持HTTP/1.1和HTTP/2协议,能够根据服务器的能力自动选择合适的协议,提升性能和效率。
• 同步和异步API: HTTPX提供标准的同步接口,同时还支持异步编程,这使得开发者可以根据需要选择合适的编程模型,充分利用异步编程带来的性能优势。
• WSGI和ASGI应用支持: HTTPX可以用来直接向WSGI和ASGI应用发送请求,这使得它在测试和与其他Python web框架集成时非常方便。
• 严格的超时设置: HTTPX在所有操作中都提供了严格的超时控制,避免请求长时间阻塞。
• 完整的类型注解: HTTPX代码具有完整的类型注解,这增强了代码的可读性和可维护性,也方便了静态类型检查工具的使用。
• 100%测试覆盖率: HTTPX拥有极高的测试覆盖率,这保证了代码的质量和稳定性。
• 丰富的功能: HTTPX还包含了
requests
库的大多数功能,例如:国际域名和URL支持、Keep-Alive和连接池、会话和Cookie持久化、浏览器风格的SSL验证、基本/摘要认证、优雅的键值对Cookie、自动解压缩、自动内容解码、Unicode响应体、多部分文件上传、HTTP(S)代理支持、连接超时、流式下载、.netrc支持、分块请求等等。
二、 HTTPX的使用方法
HTTPX的使用非常简单直观,以下是几个常见的例子:
import httpx
# 发送GET请求
with httpx.Client()as client:
response = client.get('https://www.example.org/')
print(response.status_code)# 打印状态码
print(response.text)# 打印响应文本
print(response.headers['content-type'])# 打印响应头
# 发送POST请求
with httpx.Client() as client:
response = client.post('https://httpbin.org/post', data={'key':'value'})
print(response.json())# 打印JSON响应
# 使用异步API
async def fetch_async():
async with httpx.AsyncClient()as client:
response =await client.get('https://www.example.org/')
print(response.status_code)
import asyncio
asyncio.run(fetch_async())
三、 HTTPX的安装和可选依赖
使用pip安装HTTPX:
pip install httpx
为了包含可选的HTTP/2支持,可以使用:
pip install httpx[http2]
安装命令行客户端:
pip install 'httpx[cli]'
HTTPX 需要 Python 3.8 或更高版本。
总结
HTTPX是一个功能强大、易于使用且高效的Python HTTP客户端,它结合了requests
库的易用性和现代HTTP客户端的先进特性。其对HTTP/2的支持、同步和异步API以及丰富的功能使其成为各种Python项目的理想选择。无论是简单的HTTP请求还是复杂的异步网络操作,HTTPX都能提供可靠且高效的解决方案。
项目地址:https://github.com/encode/httpx