python知识点100篇系列(17)-替换requests的python库httpx

简介: 【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。

Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,使用Requests可以轻而易举的完成浏览器可有的任何操作。

但是在python3.6之后,出现了一个requests的替代选项;

httpx

httpx是Python新一代的网络请求库, 是一个几乎继承了所有 requests 的特性并且支持 "异步" http 请求的开源库。可以认为 httpx 是强化版 requests。

主要包含以下特点:

基于Python3的功能齐全的http请求模块
既能发送同步请求,也能发送异步请求
支持HTTP/1.1和HTTP/2
能够直接向WSGI应用程序或者ASGI应用程序发送请求

注意,httpx只支持python3.6+

安装使用httpx需要Python3.6+,如果要使用异步请求还需要版本是Python3.8+

  • 安装httpx

推荐使用pip安装,在安装了pip之后,执行以下命令即可

pip install httpx

关于pip的安装方式,可以查看之前的文章或官方文档;

另外:如果需要使用HTTP/2,则需要安装http2的相关依赖

pip install httpx[http2]

在这里插入图片描述

  • 使用httpx

httpx的用法基本和requests库一样,基本用法可以参考requests模块的用法;原有代码只需要替换requests单词为httpx就行;

不同的地方有:

httpx提供了Client

httpx提供了Client解决了requests每次发送请求都需要建立一个新的连接问题,Client是基于HTTP连接池实现的,这意味着当你对一个网站发送多次请求的时候,Client会保持原有的TCP连接,从而提升程序的执行效率。

使用Client的伪代码如下:

 将请求头字符串转化为字典
headers = dict([line.split(": ",1) for line in headers.split("\n")])
#print(headers)

def httpx_req():

    with httpx.Client(headers=headers) as client:
        data_url = f'https://www.****.com/'
        res = client.get(url=data_url).json()
        #print(res)
        print(res['has_more'])
        print(res['max_cursor'])
        print(res['aweme_list'][0]['video']['play_addr'])

httpx_req()

httpx提供了异步支持

httpx提供了异步client来发送相关请求。异步client还支持WebSocket等长网络连接。使用异步client比使用多线程发送请求更加高效;

异步请求需要使用async/await语句来进行异步操作,同时一般情况下会用到一个库

asyncio

官网介绍说:
asyncio 是用来编写并发代码的库,使用 async/await 语法。其用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。

在这里插入图片描述

执行异步请求

首先是创建一个httpx.AsyncClient()对象;然后是asyncio收集任务,最后执行请求;

async def async_httpx_req(sign):
    async with httpx.AsyncClient() as client:  # 创建一个异步client
        r = await client.get('https://www.***.com/')
        print(f'async_httpx_req: {sign}:{r.status_code}')


def run():
    loop = asyncio.get_event_loop()
    tasks = [async_httpx_req(sign=i) for i in range(200)]
    task_start = time.time()
    loop.run_until_complete(asyncio.wait(tasks))
    task_end = time.time()
    loop.close()
    print(task_end - task_start)

run()

输入结果如下:

在这里插入图片描述

最后

如果要比较效率是否提高,可以编码同步请求的方法,比较以下耗时时间,就可发现效率提高了50%以上;

相关文章
|
1天前
|
XML JSON 数据库
Python的标准库
Python的标准库
108 77
|
16天前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
51 4
数据分析的 10 个最佳 Python 库
|
2天前
|
XML JSON 数据库
Python的标准库
Python的标准库
25 11
|
15天前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
68 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
2天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
29 8
|
23天前
|
XML 存储 数据库
Python中的xmltodict库
xmltodict是Python中用于处理XML数据的强大库,可将XML数据与Python字典相互转换,适用于Web服务、配置文件读取及数据转换等场景。通过`parse`和`unparse`函数,轻松实现XML与字典间的转换,支持复杂结构和属性处理,并能有效管理错误。此外,还提供了实战案例,展示如何从XML配置文件中读取数据库连接信息并使用。
Python中的xmltodict库
|
23天前
|
存储 人工智能 搜索推荐
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
Memoripy 是一个 Python 库,用于管理 AI 应用中的上下文感知记忆,支持短期和长期存储,兼容 OpenAI 和 Ollama API。
78 6
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
|
10天前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
21 4
|
23天前
|
数据采集 数据可视化 数据处理
Python数据科学:Pandas库入门与实践
Python数据科学:Pandas库入门与实践
|
18天前
|
测试技术 Python
Python中的异步编程与`asyncio`库
Python中的异步编程与`asyncio`库