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%以上;

相关文章
|
19天前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
55 20
|
9天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
1月前
|
XML JSON 数据库
Python的标准库
Python的标准库
179 77
|
1月前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
79 7
|
2月前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
159 4
数据分析的 10 个最佳 Python 库
|
1月前
|
XML JSON 数据库
Python的标准库
Python的标准库
60 11
|
2月前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
186 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
1月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
92 8
|
1月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
61 4
|
2月前
|
测试技术 Python
Python中的异步编程与`asyncio`库
Python中的异步编程与`asyncio`库

热门文章

最新文章