当前位置: 首页 > news >正文

Python 的七个HTTP请求库对比

Python HTTP请求库对比

库名称特点优点缺点
requests简单易用的HTTP库,基于urllib3- 语法简洁
- 社区支持强大
- 易于上手和维护
- 阻塞式调用,不支持异步操作
- 相比aiohttp体积较大
http.clientPython标准库中的低级HTTP库。- 无需安装第三方库
- 提供底层访问,可自定义程度高
- API使用相对复杂
- 缺少高级HTTP功能
aiohttp异步的HTTP网络通信库,支持HTTP/1.1和HTTP/2。- 支持异步操作,适合高并发
- 支持WebSockets
- 异步编程模型学习曲线陡峭
- 较新,社区支持不如requests
urllibPython标准库,提供URL处理。- 无需安装第三方库
- 功能全面,包括请求和错误处理
- 易用性不如requests
- 不支持异步操作
httpx支持HTTP/1.1和HTTP/2的异步HTTP库。- 支持同步和异步请求
- 支持HTTP/2
- 可扩展性好
- 相对于requests,知名度和社区支持较小
treq基于Twisted的异步HTTP客户端,使用requests的API风格。- 异步操作
- 与requests类似的API
- 适用于Twisted用户
- 依赖于Twisted框架
- 社区支持有限
requests-toolbeltrequests的官方扩展,提供额外功能。- 增加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头,例如AcceptAccept-LanguageConnectionCookieRefererSec-Fetch-*User-AgentX-Requested-Withsec-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

核心&#xff1a;touchstart"touchStart" touchend"touchEnd" 代码示例&#xff1a; <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导入大量数据

&#xff08;1&#xff09;在Oracle主机安装oracle客户端 sqlldr&#xff0c;在命令行输入sqlldr&#xff0c;若有help指导即已经安装了&#xff1b; &#xff08;2&#xff09;创建一个xxx.ctl文件 这个文件是执行导入数据的语句&#xff0c;其中包含需要导入的数据&#x…...

Milvus LIKE操作符

在Milvus中&#xff0c;虽然LIKE操作符被用于模糊匹配字符串&#xff0c;但其支持的模式匹配能力有限。根据你收到的错误信息&#xff0c;Milvus目前只支持两种类型的LIKE模式匹配&#xff1a; 前缀匹配&#xff0c;例如LIKE ab%&#xff0c;这意味着任何以ab开头的字符串都会…...

iQOO neo 5精简内置组件

无他!系统自带了太多组件,都用不到,连打开都不曾打开过。 下午整理一篇精简组件的列表,各自按照各自的需要进行精简哦。别盲目跟风,要不然手机使用会出问题。 精简步骤 使用任意刷机工具,开启手机的开发权限,然后adb连接 删除组件列表如下: pm uninstall --user 0…...

为什么给网站安装SSL证书之后还是有被提示不安全?

分为两种情况一种是安装了付费证书之后还是显示无效&#xff0c;另一种是安装了免费SSL证书的。 付费SSL证书&#xff1a;直接找厂商帮助解决遇到的问题&#xff0c;一般都是有专业的客服来对接这些的。 免费SSL证书&#xff1a;出现这种情况的原因会有很多。因为免费SSL证书的…...

创建Frame单例,实现WPF页面跳转

需求&#xff1a; 有一个F0View主页面入口&#xff0c;三个子页面&#xff08;First.xaml/Second.xaml/Third.xaml&#xff09;用Frame默认加载第一个页面 First.xaml。实现三个页面之间顺序跳转&#xff0c;并且每个页面只初始化一次。 实现&#xff1a; 1&#xff0c;将三…...

正宇软件助力江西数字人大建设,高效解决群众“急难愁盼”问题

近日&#xff0c;赣州市南康区群众通过“江西数字人大”小程序成功解决道路塌陷等民生问题&#xff0c;引发社会广泛关注。这一成功案例不仅彰显了“数字人大”在解决群众“急难愁盼”问题中的重要作用&#xff0c;也凸显了江西地区近年来在数字化人大建设方面的显著成效。正宇…...

打造AIPC轻量化方案 360AI浏览器及360AI搜索全新发布

“搜索这20多年来没有发生变化&#xff0c;我们希望这次能来一场革命。”6月6日&#xff0c;360AI新品发布会暨开发者沟通会在京举办。会上&#xff0c;三六零&#xff08;股票代码&#xff1a;601360.SH&#xff0c;以下简称360&#xff09;集团发布全新360AI搜索及360AI浏览器…...

《effective c++》学习笔记

从今天开始看《effective c》这本书&#xff0c;把学到的东西当做笔记记下来&#xff0c;算是督促自己学习吧&#xff0c;也算是和大家一起分享一点东西&#xff0c;理解不当的地方&#xff0c;请谅解。&#xff08;每天更新三个条款&#xff09;。 一&#xff1a;让自己习惯C…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...