httpcore

httpcore是一个专注于底层HTTP通信的Python库,是httpx库的核心传输层实现。与HTTP客户端库不同,httpcore提供了最小化的HTTP/1.1和HTTP/2协议实现,专注于连接管理、请求发送和响应接收等核心功能,让其他库可以在此基础上构建更高级的功能,httpcore支持连接池、HTTP/2多路复用、自动重试等特性。

1、安装

 pip install httpcore  -i https://pypi.mirrors.ustc.edu.cn/simple/ 

核心特性

  • HTTP/1.1和HTTP/2支持:完整实现两种协议,自动协商使用最优协议
  • 连接池管理:高效的连接复用机制,减少连接建立开销
  • 异步和同步API:同时提供async和sync两种接口,适应不同场景
  • 流式传输:支持请求和响应的流式处理,适合大文件传输
  • 超时控制:精细的超时配置,包括连接超时、读取超时等
  • 代理支持:支持HTTP和SOCKS代理配置
  • TLS/SSL支持:完整的HTTPS支持,可自定义SSL配置

基本功能

1、发送HTTP请求

httpcore提供了底层的HTTP请求接口,通过ConnectionPool管理连接。httpcore需要手动管理连接池的生命周期,在发送请求时,需要指定完整的URL组件,包括scheme、host、port等。

import httpcore

# 创建连接池
pool = httpcore.ConnectionPool()

# 发送GET请求
response = pool.request(
    method="get",
    url="https://www.baidu.com/",
)

# 读取响应
status = response.status
headers = response.headers
content = response.content

print(f"状态码:{status}")
print(f"响应内容:{content[:100]}")

# 关闭连接池
pool.close()

  

2、异步HTTP请求

httpcore完整支持异步编程,提供了AsyncConnectionPool用于异步场景。异步API在处理高并发请求时具有显著优势,可以在等待IO操作时执行其他任务,大幅提升程序效率。异步连接池的使用方式与同步版本类似,但需要使用async/await语法,异步模式特别适合需要同时处理大量HTTP请求的场景,如爬虫、API网关等应用。

import httpcore, asyncio


async def fetch_data():
    # 创建异步连接池
    async with httpcore.AsyncConnectionPool() as pool:
        # 发送异步请求
        response = await pool.request(
            method="GET",
            url="https://www.baidu.com/",
        )

        status = response.status
        content = response.content
    
        print(f"状态码:{status}")
        print(f"响应:{content[:100]}")


# 运行异步函数
asyncio.run(fetch_data())

  

3、流式响应处理

httpcore支持流式读取响应内容,在处理大文件下载或实时数据流时非常有用,通过stream方法可以逐块读取响应数据,避免一次性加载整个响应到内存,这种方式不仅节省内存,还能更快地开始处理数据。流式处理特别适合下载大文件、处理视频流、实时日志收集等场景。

import httpcore

# 创建连接池
pool = httpcore.ConnectionPool()

# 发送GET请求
response = pool.request(
    method="get",
    url="https://www.baidu.com/",
)

# 流式读取响应
print("流式读取响应:")
for chunk in response.iter_stream():
    print(f"接收数据块:{len(chunk)}字节")
    # 处理数据块
    if chunk:
        print(chunk[:50])

# 关闭连接池
pool.close()

  

高级功能

1、HTTP/2支持

httpcore原生支持HTTP/2协议,可以利用多路复用特性在单个连接上并发处理多个请求。HTTP/2相比HTTP/1.1具有更高的传输效率,减少了延迟和带宽消耗。httpcore会自动检测服务器是否支持HTTP/2,并在可能的情况下使用该协议。多路复用特性使得可以在一个TCP连接上同时发送多个请求,避免了队头阻塞问题。

import httpcore

# 创建连接池
pool = httpcore.ConnectionPool(http2=True)

# 发送多个请求,利用HTTP/2多路复用
urls = [
    ("https://www.baidu.com/"),
    ("https://map.baidu.com/"),
    ("https://image.baidu.com/"),
]

for url in urls:
    response = pool.request(method="GET", url=url)
    print(f"请求{url[3]}: 状态码{response.status}")

pool.close()

  

2、连接池配置

httpcore提供了丰富的连接池配置选项,可以根据应用需求调整连接行为。通过设置最大连接数、连接超时、保持连接时间等参数,可以优化资源使用和性能表现。合理的连接池配置能够在高并发场景下保持稳定性,避免资源耗尽。

import httpcore

# 创建连接池
pool = httpcore.ConnectionPool(
    http2=True,  # 启用HTTP/2
    max_connections=100,  # 最大连接数
    max_keepalive_connections=20,  # 保持活跃的连接数
    keepalive_expiry=5.0,  # 连接保持时间(秒)
)

# 使用配置好的连接池
response = pool.request(
    method="GET",
    url="https://www.baidu.com/",
)
print(f"状态码:{response.status}")
pool.close()

  

 

posted @ 2026-03-02 15:16  北京测试菜鸟  阅读(40)  评论(0)    收藏  举报