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…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
