Python 的七个HTTP请求库对比
Python HTTP请求库对比
| 库名称 | 特点 | 优点 | 缺点 |
|---|---|---|---|
requests | 简单易用的HTTP库,基于urllib3。 | - 语法简洁 - 社区支持强大 - 易于上手和维护 | - 阻塞式调用,不支持异步操作 - 相比 aiohttp体积较大 |
http.client | Python标准库中的低级HTTP库。 | - 无需安装第三方库 - 提供底层访问,可自定义程度高 | - API使用相对复杂 - 缺少高级HTTP功能 |
aiohttp | 异步的HTTP网络通信库,支持HTTP/1.1和HTTP/2。 | - 支持异步操作,适合高并发 - 支持WebSockets | - 异步编程模型学习曲线陡峭 - 较新,社区支持不如 requests |
urllib | Python标准库,提供URL处理。 | - 无需安装第三方库 - 功能全面,包括请求和错误处理 | - 易用性不如requests- 不支持异步操作 |
httpx | 支持HTTP/1.1和HTTP/2的异步HTTP库。 | - 支持同步和异步请求 - 支持HTTP/2 - 可扩展性好 | - 相对于requests,知名度和社区支持较小 |
treq | 基于Twisted的异步HTTP客户端,使用requests的API风格。 | - 异步操作 - 与 requests类似的API- 适用于 Twisted用户 | - 依赖于Twisted框架- 社区支持有限 |
requests-toolbelt | requests的官方扩展,提供额外功能。 | - 增加requests没有的功能- 流式上传下载支持 | - 作为扩展,需要与requests结合使用- 功能较为特定 |
在选择库时,应该考虑以下因素:
- 项目需求:是否需要异步支持,是否处理大量并发请求。
- 易用性:API的简洁性和学习曲线。
- 社区和文档:活跃的社区和详尽的文档可以加快开发速度。
- 性能:不同库在不同场景下的性能表现。
- 兼容性:是否支持需要的HTTP特性,如HTTP/2或WebSockets。
实战请求豆瓣排行榜
curl ^"https://movie.douban.com/j/chart/top_list_count?type=11&interval_id=100^%^3A90&action=^" ^-H "Accept: */*" ^-H "Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" ^-H "Connection: keep-alive" ^-H ^"Cookie: ll=^\^"118282^\^"; bid=p6VTwxlhQxU; _pk_id.100001.4cf6=1960560bd6f348cf.1717555113.; __utmc=30149280; __utmc=223695111; __yadk_uid=vu9yRywnfgofYdkNxlDGN1LGZumZZlP3; _vwo_uuid_v2=DB54A160968C09D586B65593E774AC10A^|93b3f99adf2e8bfe6ce4a84c068e3f82; _pk_ref.100001.4cf6=^%^5B^%^22^%^22^%^2C^%^22^%^22^%^2C1717727676^%^2C^%^22https^%^3A^%^2F^%^2Fwww.heywhale.com^%^2F^%^22^%^5D; push_noty_num=0; push_doumail_num=0; __utmv=30149280.19806; __utma=30149280.912128761.1717555113.1717725025.1717728345.3; __utmz=30149280.1717728345.3.2.utmcsr=google^|utmccn=(organic)^|utmcmd=organic^|utmctr=(not^%^20provided); __utma=223695111.1475293929.1717555113.1717727676.1717728345.4; __utmz=223695111.1717728345.4.2.utmcsr=google^|utmccn=(organic)^|utmcmd=organic^|utmctr=(not^%^20provided)^" ^-H ^"Referer: https://movie.douban.com/typerank?type_name=^%^E5^%^89^%^A7^%^E6^%^83^%^85&type=11&interval_id=100:90&action=^" ^-H "Sec-Fetch-Dest: empty" ^-H "Sec-Fetch-Mode: cors" ^-H "Sec-Fetch-Site: same-origin" ^-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" ^-H "X-Requested-With: XMLHttpRequest" ^-H ^"sec-ch-ua: ^\^"Google Chrome^\^";v=^\^"125^\^", ^\^"Chromium^\^";v=^\^"125^\^", ^\^"Not.A/Brand^\^";v=^\^"24^\^"^" ^-H "sec-ch-ua-mobile: ?0" ^-H ^"sec-ch-ua-platform: ^\^"Windows^\^"^"
这个curl命令包含了一个HTTP GET请求,它发送到豆瓣电影的某个API端点,请求某种类型的电影排行数据。请求中包含了多个HTTP头,例如Accept、Accept-Language、Connection、Cookie、Referer、Sec-Fetch-*、User-Agent、X-Requested-With和sec-ch-ua等。这些头信息通常用于控制请求的行为,或者提供客户端环境的额外信息。
以下是使用几种不同的Python HTTP请求库来模拟这个curl请求的示例:
1. 使用 requests 库
import requestsurl = "https://movie.douban.com/j/chart/top_list_count?type=11&interval_id=100:90&action="
headers = {"Accept": "*/*","Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","Connection": "keep-alive",# Cookie 头过长,需要按实际值填充# ..."Referer": "https://movie.douban.com/typerank?type_name=剧情&type=11&interval_id=100:90&action=",# 其他 headers 按需填充# ..."User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}response = requests.get(url, headers=headers)
print(response.text)
2. 使用 aiohttp 库(异步)
import aiohttp
import asyncioasync def fetch(url, headers):async with aiohttp.ClientSession() as session:async with session.get(url, headers=headers) as response:return await response.text()url = "https://movie.douban.com/j/chart/top_list_count?type=11&interval_id=100:90&action="
headers = {...} # 同上loop = asyncio.get_event_loop()
html = loop.run_until_complete(fetch(url, headers))
print(html)
3. 使用 http.client(Python 标准库)
import http.client
import urllib.parseconn = http.client.HTTPSConnection("movie.douban.com")# 将参数编码为URL
params = urllib.parse.urlencode({'type': '11','interval_id': '100:90','action': ''
})
url = f"/j/chart/top_list_count?{params}"headers = {# 同上
}conn.request("GET", url, headers=headers)response = conn.getresponse()
data = response.read()print(data.decode('utf-8'))conn.close()
注意事项
- 由于
Cookie和其他一些headers可能非常长,这里没有完全展示它们的值。在实际使用中,你需要将它们完整地填入headers字典中。 - 在
requests示例中,我们使用同步方式发送请求并打印响应内容。 - 在
aiohttp示例中,我们使用异步方式发送请求。aiohttp是处理并发请求的好选择,特别是在需要处理大量网络I/O操作时。 - 在
http.client示例中,我们使用了Python标准库中的低级HTTP客户端。这种方式比较繁琐,但它不依赖于任何外部库。
根据你的需求和偏好,选择最适合你的库来执行HTTP请求。如果你需要处理大量并发请求,可能会倾向于使用aiohttp。如果你需要简单快速地发起请求,并且不想引入额外的依赖,可能会选择requests。如果你正在编写一个需要精细控制网络层面的底层应用,可能会选择http.client。
相关文章:
Python 的七个HTTP请求库对比
Python HTTP请求库对比 库名称特点优点缺点requests简单易用的HTTP库,基于urllib3。- 语法简洁- 社区支持强大- 易于上手和维护- 阻塞式调用,不支持异步操作- 相比aiohttp体积较大http.clientPython标准库中的低级HTTP库。- 无需安装第三方库- 提供底层…...
顶顶通呼叫中心中间件-如何配置识别不同语种的ASR
文章目录 前言联系我们创建不同语种的语音识别任务开始对接识别不同语种的ASR重启 asrproxy 程序使用识别不同语种的ASR 前言 之前讲过顶顶通的 asrproxy 程序如何对接第三方的ASR,比如:阿里云的ASR。不知道如何对接的,可以参考:…...
C# SolidWorks 二次开发-显示配置
在 SolidWorks 的二次开发中,显示配置(Display States)是一个非常重要的功能。显示配置允许用户在同一个配置(Configuration)下保存不同的显示状态,如隐藏或显示的零件、不同的颜色和材质等。本文将向新的开…...
PXE自动装机
一、PXE概述 PXE:c/s架构,允许客户端通过网络从远程服务器(服务端)下载引导镜像,加载安装文件,实现自动化安装操作系统。 c/s 架构:服务端和客户端都可以是多台。 无人值守:安装选…...
MQ之初识kafka
1. MQ简介 1.1 MQ的诞生背景 以前网络上的计算机(或者说不同的进程)传递数据,通信都是点对点的,而且要实现相同的协议(HTTP、 TCP、WebService)。1983 年的时候,有个在 MIT 工作的印度小伙突发…...
linux驱动学习(七)之混杂设备
需要板子一起学习的可以这里购买(含资料):点击跳转 一、混杂设备 混杂设备也叫杂项设备,是对普通的字符设备(struct cdev)的一种封装,设计目的就是为了简化字符设备驱动设计的流程。具有以下特点: 1) 主设备号为10&a…...
【数据结构与算法 | 堆篇】力扣215, 703
1. 力扣215 : 数组中的第k个最大元素 (1). 题 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解…...
项目经理进入职场都会经历的三个阶段
对于项目经理而言,进入职场是一个不断学习和成长的过程。在这个过程中,项目经理通常会经历三个主要阶段,每个阶段都有其独特的特点和挑战。 一、基础建设与学习阶段 对于新入行的项目经理来说,最初的阶段主要是基础技能的积累和…...
消防设施工程乙级资质全解析:申请条件与流程“
消防设施工程乙级资质全解析:申请条件与流程 消防设施工程乙级资质,作为衡量企业从事特定规模消防设施设计能力的重要标尺,对于想要在消防工程领域拓展业务的企业而言至关重要。本文将全面解析申请消防设施工程乙级资质所需的条件、流程及相…...
【C语言】03.分支结构
本文用以介绍分支结构,主要的实现方式为if语句和switch语句。 一、if语句 1.1 if语句 if (表达式)语句表达式为真则执行语句,为假就不执行。在C语言中,0表示假,非0表示真.下图表示if的执行过程: 1.2 else语句 当…...
uniapp手机屏幕左滑返回上一页支持APP,H5
核心:touchstart"touchStart" touchend"touchEnd" 代码示例: <template><view class"payPasswordSetting" touchstart"touchStart" touchend"touchEnd"></view> </template&g…...
【Java毕业设计】基于JavaWeb的洗衣店管理系统
文章目录 摘要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 SpringBoot框架1.4.2 MySQL数据库1.4.3 MVC模式 2 系统需求分析2.1 可行性分析2.2 功能需求分析 3 系统设计3.1 功能模块设计3.2 系统流程设计3.3 数据库设计3.3.1 …...
使用sqlldr向oracle导入大量数据
(1)在Oracle主机安装oracle客户端 sqlldr,在命令行输入sqlldr,若有help指导即已经安装了; (2)创建一个xxx.ctl文件 这个文件是执行导入数据的语句,其中包含需要导入的数据&#x…...
Milvus LIKE操作符
在Milvus中,虽然LIKE操作符被用于模糊匹配字符串,但其支持的模式匹配能力有限。根据你收到的错误信息,Milvus目前只支持两种类型的LIKE模式匹配: 前缀匹配,例如LIKE ab%,这意味着任何以ab开头的字符串都会…...
iQOO neo 5精简内置组件
无他!系统自带了太多组件,都用不到,连打开都不曾打开过。 下午整理一篇精简组件的列表,各自按照各自的需要进行精简哦。别盲目跟风,要不然手机使用会出问题。 精简步骤 使用任意刷机工具,开启手机的开发权限,然后adb连接 删除组件列表如下: pm uninstall --user 0…...
为什么给网站安装SSL证书之后还是有被提示不安全?
分为两种情况一种是安装了付费证书之后还是显示无效,另一种是安装了免费SSL证书的。 付费SSL证书:直接找厂商帮助解决遇到的问题,一般都是有专业的客服来对接这些的。 免费SSL证书:出现这种情况的原因会有很多。因为免费SSL证书的…...
创建Frame单例,实现WPF页面跳转
需求: 有一个F0View主页面入口,三个子页面(First.xaml/Second.xaml/Third.xaml)用Frame默认加载第一个页面 First.xaml。实现三个页面之间顺序跳转,并且每个页面只初始化一次。 实现: 1,将三…...
正宇软件助力江西数字人大建设,高效解决群众“急难愁盼”问题
近日,赣州市南康区群众通过“江西数字人大”小程序成功解决道路塌陷等民生问题,引发社会广泛关注。这一成功案例不仅彰显了“数字人大”在解决群众“急难愁盼”问题中的重要作用,也凸显了江西地区近年来在数字化人大建设方面的显著成效。正宇…...
打造AIPC轻量化方案 360AI浏览器及360AI搜索全新发布
“搜索这20多年来没有发生变化,我们希望这次能来一场革命。”6月6日,360AI新品发布会暨开发者沟通会在京举办。会上,三六零(股票代码:601360.SH,以下简称360)集团发布全新360AI搜索及360AI浏览器…...
《effective c++》学习笔记
从今天开始看《effective c》这本书,把学到的东西当做笔记记下来,算是督促自己学习吧,也算是和大家一起分享一点东西,理解不当的地方,请谅解。(每天更新三个条款)。 一:让自己习惯C…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
