Python模块之Httpx详细功能介绍及示例

httpx 是 Python 中一个功能强大的 HTTP 客户端库,支持同步和异步请求、HTTP/2、连接池等功能。以下是 httpx 的常用方法及实际示例:


1. 安装

pip install httpx

2. 核心方法及示例

(1) 同步请求
  • httpx.get(): 发送 GET 请求
  • httpx.post(): 发送 POST 请求
  • httpx.put(): 发送 PUT 请求
  • httpx.delete(): 发送 DELETE 请求
  • httpx.request(): 通用请求方法

示例:同步 GET 请求

import httpx

response = httpx.get("https://httpbin.org/get")
print(response.status_code)  # 200
print(response.text)         # 返回的文本内容
print(response.json())       # 解析 JSON 响应

(2) 使用 Client

通过 httpx.Client() 创建客户端实例,支持连接池和复用配置(如 headers、超时等)。

示例:使用 Client

with httpx.Client(headers={"User-Agent": "MyApp"}, timeout=10) as client:
    response = client.get("https://httpbin.org/get")
    print(response.json())

    # 发送 POST 表单数据
    response = client.post(
        "https://httpbin.org/post",
        data={"key": "value"}
    )

(3) 异步请求

使用 AsyncClient 发送异步请求(需配合 asyncio)。

示例:异步 GET 请求

import httpx
import asyncio

async def fetch_data():
    async with httpx.AsyncClient() as client:
        response = await client.get("https://httpbin.org/get")
        print(response.json())

asyncio.run(fetch_data())

(4) 处理响应对象

响应对象(Response)的常用属性和方法:

  • response.status_code: 状态码(如 200、404)
  • response.headers: 响应头(字典格式)
  • response.text: 文本格式的响应内容
  • response.json(): 解析 JSON 响应
  • response.raise_for_status(): 如果状态码为 4xx/5xx,抛出异常

示例:处理错误状态码

response = httpx.get("https://httpbin.org/status/404")
try:
    response.raise_for_status()  # 抛出 httpx.HTTPStatusError
except httpx.HTTPStatusError as e:
    print(f"错误: {e}")

(5) 文件上传

使用 files 参数上传文件。

示例:上传文件

files = {"file": open("example.txt", "rb")}
response = httpx.post("https://httpbin.org/post", files=files)
print(response.json())

(6) 设置超时与认证
  • 超时:通过 timeout 参数设置。
  • 认证:通过 auth 参数设置(如基本认证)。

示例:超时与认证

# 设置超时为 5 秒
response = httpx.get("https://httpbin.org/delay/3", timeout=5)

# 基本认证
auth = ("user", "pass")
response = httpx.get("https://httpbin.org/basic-auth/user/pass", auth=auth)

(7) 启用 HTTP/2

需安装 httpx[http2] 并显式启用。

示例:HTTP/2 请求

client = httpx.Client(http2=True)
response = client.get("https://httpbin.org/get")
print(response.http_version)  # 输出 "HTTP/2"

3. 高级功能

  • 流式响应:使用 stream() 处理大文件。

    with httpx.stream("GET", "https://httpbin.org/stream/10") as response:
        for chunk in response.iter_bytes():
            print(chunk)
    
  • 代理:通过 proxies 参数配置。

    proxies = {"http://": "http://proxy.example.com"}
    response = httpx.get("http://httpbin.org/ip", proxies=proxies)
    

4. 总结

httpx 的主要优势:

  1. 支持同步和异步请求。
  2. 兼容 HTTP/1.1 和 HTTP/2。
  3. 提供类型注解和现代化 API。
  4. 丰富的功能(如文件上传、代理、连接池)。

通过上述示例,可以快速上手 httpx 进行 HTTP 请求操作。

HTTPX是一个全面支持HTTP/1.1和HTTP/2协议的异步和同步HTTP客户端库,非常适合现代Python网络编程。它结合了async/await语法,提供了一个简洁且直观的API,是requests库的理想替代品,尤其是在需要处理异步I/O时。 参考资源链接:[Python HTTPX库:掌握最新HTTP客户端开发技术](https://wenku.csdn.net/doc/58o9fmmf6s) 为了更好地掌握HTTPX的使用,建议参考《Python HTTPX库:掌握最新HTTP客户端开发技术》。这本书提供了从基础到高级的HTTPX使用指南,可以帮助你快速上手并解决实际问题。 以下是一个使用HTTPX发送GET请求的简单示例代码: ```python import httpx # 创建一个HTTPX客户端实例 async with httpx.AsyncClient() as client: # 发送GET请求 response = await client.get('***') # 打印响应状态码和内容 print(response.status_code) print(response.json()) # 在同步代码中,你可以这样做: client = httpx.Client() response = client.get('***') print(response.status_code) print(response.json()) client.close() ``` 在上述示例中,我们首先导入了httpx模块,并使用其AsyncClient类创建了一个异步HTTP客户端。通过async with语句块,我们异步地发送了一个GET请求到指定的URL,并等待响应。同步版本则使用Client类并调用其get方法,最后别忘了关闭客户端。 通过使用HTTPX,你可以享受到以下优势: 1. 支持HTTP/1.1和HTTP/2协议,提供更快、更安全的网络通信。 2. 异步支持使得在处理I/O密集型应用时更加高效。 3. 提供清晰、直观的API,便于理解和使用。 4. 完整的流式支持,可以流式处理大型文件的上传和下载。 5. 内置的重定向、自动代理发现、会话保持等功能,使得网络编程更加简便。 了解了HTTPX库的优势和如何使用它之后,如果你想进一步深入学习,可以参考提供的《Python HTTPX库:掌握最新HTTP客户端开发技术》一书,它包含了更多高级主题和实战技巧,帮助你在网络编程领域不断进步。 参考资源链接:[Python HTTPX库:掌握最新HTTP客户端开发技术](https://wenku.csdn.net/doc/58o9fmmf6s)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值