httpx,一个网络请求的 Python 新宠儿
大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。
一个简单的库,也许能够开启我们的智慧之门,
一个普通的方法,也许能在危急时刻挽救我们于水深火热,
一个新颖的思维方式,也许能激发我们无尽的创造力,
一个独特的技巧,也许能成为我们的隐形盾牌……
神奇的 Python 库之旅,第 10 章
目录
- 一、初始 httpx
- 二、初级用法
- 三、异步请求
- 四、高级用法
- 五、总结
- 六、作者Info
一、初始 httpx
说起 Python 里的 HTTP 请求库,requests 几乎是无人不知、无人不晓。作为一个简洁易用的库,requests 已经帮助无数开发者顺利完成了网络请求。然而,随着技术的发展,大家对功能和性能的要求越来越高,于是 httpx 应运而生。
httpx 是一个比 requests 更强大的库,不仅继承了 requests 的简洁易用,还支持异步编程、HTTP/2、连接池复用等高级特性。
httpx > requests + aiohttp
安装 httpx
在开始之前,我们需要先安装 httpx,运行以下命令:
pip install httpx
Github 项目地址:
https://github.com/projectdiscovery/httpx
好了,工具在手,让我们大展身手!
…
二、初级用法
httpx 的用法和 requests 非常相似,下面我们先来看一些基础用法。
发送一个简单的 GET 请求
import httpxresponse = httpx.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)
print(response.json())
是不是很眼熟?没错,httpx 的用法和 requests 几乎一模一样。如果你用过 requests,那么上手 httpx 完全没有问题。
发送一个 POST 请求
import httpxdata = {'title': 'foo','body': 'bar','userId': 1
}response = httpx.post('https://jsonplaceholder.typicode.com/posts', json=data)
print(response.status_code)
print(response.json())
POST 请求也同样简单,只需要多加一个 json 参数就搞定了。你可以用 json、data、params 等参数来发送不同类型的数据。
处理请求超时
处理请求超时在实际开发中非常重要,httpx 也为我们提供了友好的方式。
import httpxtry:response = httpx.get('https://httpbin.org/delay/5', timeout=3.0)
except httpx.RequestError as exc:print(f"An error occurred while requesting {exc.request.url!r}.")
except httpx.HTTPStatusError as exc:print(f"Error response {exc.response.status_code} while requesting {exc.request.url!r}.")
在这个示例中,我们向一个会延迟响应的 URL 发送请求,并设置了 3 秒的超时时间。若请求超时或发生其他错误,httpx 会抛出相应的异常。
三、异步请求
异步编程可以显著提高程序的性能,尤其是在处理大量 I/O 操作时。httpx 提供了异步支持,让我们可以轻松编写异步代码。
异步 GET 请求
首先,我们来看一个简单的异步 GET 请求示例。
import httpx
import asyncioasync def fetch():async with httpx.AsyncClient() as client:response = await client.get('https://jsonplaceholder.typicode.com/posts/1')print(response.status_code)print(response.json())asyncio.run(fetch())
是不是很简单?通过 async with 语句创建一个异步客户端,我们就可以使用 await 来等待请求的响应。
同时发送多个请求
异步编程的一个大优势是可以同时发送多个请求,显著缩短总的请求时间。
import httpx
import asyncioasync def fetch(url):async with httpx.AsyncClient() as client:response = await client.get(url)return response.json()async def main():urls = ['https://jsonplaceholder.typicode.com/posts/1','https://jsonplaceholder.typicode.com/posts/2','https://jsonplaceholder.typicode.com/posts/3']tasks = [fetch(url) for url in urls]results = await asyncio.gather(*tasks)for result in results:print(result)asyncio.run(main())
在这个示例中,我们使用 asyncio.gather 同时发送了三个请求,并打印了每个请求的结果。
四、高级用法
httpx 还提供了许多高级功能,如 HTTP/2 支持、代理、连接池等,下面我们来逐一介绍。
HTTP/2 支持
HTTP/2 是新一代的 HTTP 协议,具有更高的性能和效率。httpx 天然支持 HTTP/2,我们只需要进行简单配置。
import httpxclient = httpx.Client(http2=True)
response = client.get('https://www.google.com')
print(response.http_version) # 输出: 'HTTP/2'
代理支持
在某些情况下,我们需要通过代理发送请求。httpx 支持 HTTP 和 SOCKS 代理。
import httpxproxies = {'http://': 'http://10.10.1.10:3128','https://': 'http://10.10.1.10:1080',
}response = httpx.get('https://www.example.com', proxies=proxies)
print(response.text)
连接池复用
连接池复用可以显著提升性能,尤其是发送大量请求时。httpx 默认启用了连接池复用,但我们也可以手动配置。
import httpxclient = httpx.Client()
for _ in range(10):response = client.get('https://www.example.com')print(response.status_code)
client.close()
在这个示例中,我们通过同一个客户端发送了 10 次请求,httpx 会自动复用连接池,提高请求效率。
更多功能,详细用法可参考官方文档:
https://www.python-httpx.org/#documentation
…
五、总结
httpx 作为一个新兴的 Python HTTP 请求库,以其简洁的 API 和强大的功能迅速受到了广泛关注。它不仅继承了 requests 的易用性,还在性能和功能上做了许多改进,尤其是对异步编程和 HTTP/2 的支持。
在本文中,我们通过多个代码示例,展示了 httpx 的基础用法、异步请求和高级功能。希望这些内容能帮助你更好地理解和使用 httpx,无论是开发个人项目还是处理复杂的网络请求,httpx 都是一个值得尝试的工具。
如果你对 httpx 感兴趣,不妨在你的项目中试用一下,相信你会爱上这个强大的库。感谢大家的阅读,希望这篇文章能给你带来帮助和启发。
六、作者Info
Author:小鸿的摸鱼日常
Goal:让编程更有趣! 专注于 Web 开发、爬虫,游戏开发,数据分析、自然语言处理,AI 等,期待你的关注,让我们一起成长、一起Coding!
版权说明:本文禁止抄袭、转载,侵权必究!
相关文章:

httpx,一个网络请求的 Python 新宠儿
大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…...

计算机网络408考研 2014
1 计算机网络408考研2014年真题解析_哔哩哔哩_bilibili 1 111 1 11 1...
JavaScript 资源大全中文版
目录 JavaScript资源大全中文版 包管理器加载器组件管理器打包工具测试框架QA工具MVC 框架和库基于 Node 的 CMS 框架模板引擎文章和帖子数据可视化 时间轴电子表格 编辑器文档工具 文件函数式编程响应式编程数据结构日期字符串数字存储颜色国际化和本地化控制流路由安全性日志…...

如何获取能直接在浏览器打开的播放地址?
背景:需要在浏览器上直接打开设备的画面,但又不想二次开发 本文介绍一种极简的取流方式,不需要掌握前端开发知识,按照本文档拼接就能得到设备的播放地址 一、准备工作 1.将设备接入到萤石账号下。萤石设备接入指南:h…...

如何用 LangChain 实现一个Zero Shot智能决策器(附源码)
写在前面 最近一直在研究Agent和Tool的使用,今天给大家带来一篇何枝大佬(知乎何枝)的文章《如何用LangChain实现一个Zero Shot智能决策器》,并附上源码。 知乎:https://zhuanlan.zhihu.com/p/627333499LangChain是当…...

读完这本书,我终于搞懂了Transformer、BERT和GPT!【附PDF】
前言 《Transformer、BERT和GPT: 包括ChatGPT和提示工程》 是一本深入浅出地介绍自然语言处理领域前沿技术的专著,全书一共379页PDF,是截止到目前比较系统介绍NLP和GPT融合领域的书籍。 全书共十章,内容丰富,结构清晰,…...
仿RabbitMq简易消息队列基础篇(Muduo库的使用)
TOC Muduo库简介 Muduo由陈硕⼤佬开发,是⼀个基于⾮阻塞IO和事件驱动的C⾼并发TCP⽹络编程库。他是一款基于主从Reactor模型的网络库,其使用的线程模型是one loop per thread, 所谓 one loop per thread 指的是: 一个线程只能有一个事件循…...
.net SqlSugarHelper
NuGet安装: SqlSugarCore using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Namespace {public class SqlSugarHelper{public string _connectionString Custom…...

“AI能不能代替某某职业”,到底谁在破防?
前几天,公司在午间分享时谈到一个有趣的辩题:“AI能不能代替产品经理”,不仅双方辩手打了个你来我往,就连下面的吃瓜群众也进入红温状态。 “AI能不能代替xx”已经成为一个普遍的话题,在某乎上随手一刷就是不同的职业…...

智慧图书馆:构建高效视频智能管理方案,提升图书馆个性化服务
一、背景分析 随着信息技术的飞速发展,智慧图书馆作为现代公共文化服务的重要载体,正逐步从传统的纸质阅读空间向数字化、智能化方向转型。其中,视频智能管理方案作为智慧图书馆安全管理体系的重要组成部分,不仅能够有效提升图书…...
React快速开发框架
本框架主要用于快速搭建项目 使用的基本库:webpackreactreact-routertypescript ps:有不足之处请多多包涵,提出意见或者建议 目的: 前端开发大多数时间是基于市面上比较流行的成品框架开始进行开发,途中遇到的问题大…...

【前端】记录各种控制台警告/bug
一、Element Plus 1、控制台警告:“Runtime directive used on component with non-element root node. The directives will not function as intended.” 错误原因:在 Vue 组件上使用了运行时指令(指那些在运行时动态绑定到 DOM 元素上的指…...

猫咪掉毛严重怎么办?铲屎官家庭必备清理工具——宠物空气净化器
“毛,毛,毛,还是毛!”铲屎官们每天都离不开和猫毛斗智斗勇,家里的每个角落都成了“战场”,掉毛的严重程度超乎想象。有时也在后悔当初怎么不养只无毛猫,而是把毛孩子接了回来,世上没…...

顺序表的实现——数据结构
线性表 文章目录 线性表线性表的定义和基本操作线性表的定义线性表的基本操作 线性表的顺序表示顺序表的定义顺序表的实现——静态分配顺序表的实现——动态分配顺序表的特点 线性表的定义和基本操作 线性表的定义 线性表(Linear List)的定义 线性…...
【模块化】CommonJS,AMD规范,CMD规范,ES6模块化
1. CommonJS Node.js基于CommonJS规范应运而生 1.1 commonjs规范语法导出模块 module.exports { a, b }1.2 commonjs规范语法引入模块 const mod require(./导出模块name)2. AMD 规范 RequireJS 是AMD规范的实现。是js文件和模块的加载器。 在没有单页应用(angu…...
3.js - 顶点着色器、片元着色器的联系
1、定义与功能 顶点着色器 顶点着色器,是图形渲染管线中的第一个可编程阶段,它的主要任务是,处理从CPU发送到GPU的顶点数据,包括:1、顶点位置的变换(如:模型空间 -> 世界空间 -> 视图控件…...

kotlin简介
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。 Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。 在Google I/O 2017…...

Mintegral出海系列:解锁全球应用商店新增长路径
在全球化竞争的浪潮中,面对打法各异的应用和游戏品类,以及全球数百个环境不同的国家和地区,开发者们正面临着前所未有的挑战。Mintegral「出海ing」系列专题内容,助力出海开发者选准赛道探索新的增长路径。 据近期数据显示&#x…...
Qt 哈希加密之 QCryptographicHash
【写在前面】 QCryptographicHash 是 Qt 框架中提供的一个类,它用于实现加密散列函数,也就是我们常说的哈希函数。哈希函数能够将任意长度的数据转换为固定长度的哈希值,这个哈希值通常用于数据的完整性校验、密码存储等场景。 什么是哈希函数…...

渗透第二次作业
目录 简述rce漏洞 可能产生rce漏洞的函数 RCE代码执行漏洞示例 贷齐乐系统多处SQL注入漏洞 编辑 爆出库名 爆出表名 爆出表下的列名 查flag数据 简述rce漏洞 rce漏洞,即远程代码执行和远程命令执行漏洞。这种漏洞允许攻击者在后台服务器上远程注入操作…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...