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

相关文章
|
3月前
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
561 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
3月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
274 0
|
2月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
277 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
2月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
345 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
4月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
289 18
|
4月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
433 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
4月前
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
421 0
|
4月前
|
存储 监控 安全
Python剪贴板监控实战:clipboard-monitor库的深度解析与扩展应用
本文介绍了基于Python的剪贴板监控技术,结合clipboard-monitor库实现高效、安全的数据追踪。内容涵盖技术选型、核心功能开发、性能优化及实战应用,适用于安全审计、自动化办公等场景,助力提升数据管理效率与安全性。
201 0
|
JSON 测试技术 数据格式
python接口自动化测试 - requests库的post请求进行文件上传
python接口自动化测试 - requests库的post请求进行文件上传
1082 0
python接口自动化测试 - requests库的post请求进行文件上传

推荐镜像

更多