Python中的HTTP客户端库:httpx与request | python小知识
Python中的HTTP客户端库:httpx与request | python小知识
在Python中,发送HTTP请求和处理响应是网络编程的基础。requests和httpx是两个常用的HTTP库,它们都提供了简洁易用的API来发送HTTP请求。然而,httpx作为新一代的HTTP客户端库,在功能和性能上都有所提升。本文将详细介绍httpx和requests的区别,并通过对比展示httpx的优势。
1. requests库简介
requests是一个非常流行的Python HTTP库,它基于urllib3库实现,提供了许多方便的功能,并且非常易于使用。requests库支持HTTP连接保持和连接池,能够自动处理cookies、文件上传、自动确定响应内容的编码以及国际化的URL和POST数据自动编码。requests库自称为“HTTP for Humans”,即让HTTP服务于人类,说明其设计目标是简洁和方便。
安装requests库
pip install requests
使用requests库发送HTTP请求
import requests# 发送GET请求
response = requests.get('https://www.example.com')
print(response.status_code) # 输出响应状态码
print(response.text) # 输出响应文本# 发送POST请求
data = {'key': 'value'}
headers = {'Content-Type': 'application/json'}
response = requests.post('https://www.example.com', json=data, headers=headers)
print(response.status_code) # 输出响应状态码
print(response.text) # 输出响应文本
2. httpx库简介与对比
httpx是一个新一代的Python HTTP客户端库,它支持同步和异步两种方式发送HTTP请求,并且提供了许多现代化的特性。与requests相比,httpx在以下几个方面有所提升:
2.1 异步支持
requests库只能使用同步方式发送HTTP请求,而httpx则既可以使用同步方式,也可以使用异步方式。这意味着httpx可以在处理需要等待的操作时不会阻塞程序,从而提高效率。
示例:使用httpx发送异步HTTP请求
import httpx
import asyncio# 定义异步函数
async def fetch(url):async with httpx.AsyncClient() as client:response = await client.get(url)return response.json()# 定义并发任务
async def main():urls = ['https://api.github.com', 'https://httpbin.org/get']tasks = [fetch(url) for url in urls]results = await asyncio.gather(*tasks)for result in results:print(result)# 执行异步任务
asyncio.run(main())
2.2 HTTP/2支持
requests库只支持HTTP/1.1协议,而httpx则支持HTTP/2协议。HTTP/2提供了许多性能改进,比如多路复用和服务端推送,这些都可以提高HTTP通信的效率。
2.3 性能提升
httpx使用httptools库来解析和处理HTTP报文,而requests则使用urllib3库。httptools库在解析和处理HTTP报文方面有更好的性能,因此httpx可能会比requests更快。
2.4 兼容性
httpx的API设计与requests类似,因此从requests迁移到httpx的成本几乎是零。你可以很容易地将现有的requests代码替换为httpx代码,而无需做太多修改。
2.5 丰富的功能
httpx还支持多种认证方式(如Basic、Digest、JWT、OAuth等)、中间件挂载、设置请求的超时时间、自动处理重定向以及设置代理服务器等功能。这些功能使得httpx在处理复杂的HTTP请求时更加灵活和强大。
2.6 更多例子
当然可以,以下是使用httpx库进行POST请求的更多示例,包括同步和异步两种方式。
同步POST请求示例
示例1:发送表单数据
import httpx# 目标URL
url = 'https://example.com/api/form'# 表单数据
form_data = {'username': 'testuser','password': 'testpass'
}# 使用httpx发送同步POST请求(表单数据)
with httpx.Client() as client:response = client.post(url, data=form_data) # 注意这里使用data参数发送表单数据# 打印响应状态码和响应内容
print(response.status_code)
print(response.text) # 假设服务器返回的是文本格式的响应体
示例2:发送JSON数据并设置请求头
import httpx# 目标URL
url = 'https://example.com/api/json'# JSON数据
json_data = {'name': 'John Doe','age': 30
}# 自定义请求头
headers = {'Content-Type': 'application/json','Authorization': 'Bearer your_token_here'
}# 使用httpx发送同步POST请求(JSON数据+自定义请求头)
with httpx.Client() as client:response = client.post(url, json=json_data, headers=headers) # json参数会自动设置Content-Type为application/json# 打印响应状态码和响应内容
print(response.status_code)
print(response.json()) # 假设服务器返回的是JSON格式的响应体
异步POST请求示例
示例1:发送JSON数据
import httpx
import asyncio# 异步函数,用于发送POST请求(JSON数据)
async def fetch_json(url, data):async with httpx.AsyncClient() as client:response = await client.post(url, json=data)return response# 目标URL
url = 'https://example.com/api/json'# JSON数据
json_data = {'name': 'Jane Doe','email': 'jane.doe@example.com'
}# 使用asyncio运行异步函数
async def main():response = await fetch_json(url, json_data)# 打印响应状态码和响应内容print(response.status_code)print(response.json()) # 假设服务器返回的是JSON格式的响应体# 运行异步主函数
asyncio.run(main())
示例2:发送文件数据
import httpx
import asyncio# 异步函数,用于发送POST请求(文件数据)
async def upload_file(url, file_path):async with httpx.AsyncClient() as client:with open(file_path, 'rb') as file:files = {'file': ('filename', file, 'application/octet-stream')}response = await client.post(url, files=files)return response# 目标URL
url = 'https://example.com/api/upload'# 文件路径
file_path = '/path/to/your/file.txt'# 使用asyncio运行异步函数
async def main():response = await upload_file(url, file_path)# 打印响应状态码和响应内容print(response.status_code)print(response.text) # 假设服务器返回的是文本格式的响应体# 运行异步主函数
asyncio.run(main())
在这些示例中,我们展示了如何使用httpx库发送不同类型的POST请求,包括表单数据、JSON数据、自定义请求头以及文件上传。无论是同步还是异步方式,httpx都提供了简洁且强大的API来满足各种HTTP请求需求。
3. 总结
综上所述,httpx作为新一代的Python HTTP客户端库,在异步支持、HTTP/2支持、性能提升以及功能丰富性等方面都优于requests库。如果你正在寻找一个强大且灵活的HTTP客户端库来处理你的Python网络编程需求,那么httpx无疑是一个值得考虑的选择。
无论你是初学者还是经验丰富的开发者,都可以通过学习和使用httpx来提升你的Python网络编程技能。希望这篇博客能够帮助你更好地理解和使用httpx库!
相关文章:
Python中的HTTP客户端库:httpx与request | python小知识
Python中的HTTP客户端库:httpx与request | python小知识 在Python中,发送HTTP请求和处理响应是网络编程的基础。requests和httpx是两个常用的HTTP库,它们都提供了简洁易用的API来发送HTTP请求。然而,httpx作为新一代的HTTP客户端…...
【Python】Python入门基础——环境搭建
学习Python,首先需要搭建一个本地开发环境,或是使用线上开发环境(各类练习网站),这里主要记录本地开发环境的配置。 目录: 一、下载和安装python解释器 官网下载地址:Download Python | Pytho…...
2025 pwn_A_childs_dream
文章目录 fc/sfc mesen下载和使用推荐 fc/sfc https://www.mesen.ca/docs/ mesen2安装,vscode安装zg 任天堂yyds w d 左右移动 u结束游戏 i崩溃或者卡死了 L暂停 D658地方有个flag 发现DEEE会使用他。且只有这个地方,maybe会输出flag,应…...
面试题整理:操作系统
文章目录 操作系统操作系统基础1. 操作系统的功能?2. 什么是用户态和内核态? 进程和线程1. 是什么?区别?2. ⭐线程间的同步的方式有哪些?3. PCB 是什么?包含哪些信息?4. 进程的状态有哪些&#…...
构建未来教育的基石:智慧校园与信息的重要性
随着科技的迅猛发展,教育领域正经历一场深刻的变革。在这个过程中,“智慧校园”作为教育信息化的重要实践,扮演着不可或缺的角色。智慧校园不仅仅是硬件设施的升级,更是一种全新的教育理念,强调利用信息技术优化教育资…...
C# 控制台相关 API 与随机数API
C# 控制台相关 API 与随机数API 控制台输入输出 功能说明 Console.WriteLine(string): 输出字符串并换行Console.Write(string, string): 输出字符串不换行Console.ReadLine(): 等待用户输入并返回字符串Console.ReadKey(bool).KeyChar: 读取按键,指定是否显示输…...
【踩坑】⭐️MyBatis的Mapper接口中不建议使用重载方法
目录 🍸前言 🍻一、背景 🍹二、问题处理 💞️三、处理方法 🍸前言 小伙伴们大家好,很久没有水..不是,写文章了,都收到系统的消息了;我算下时间,上周是单休…...
CSS Grid 网格布局,以及 Flexbox 弹性盒布局模型,它们的适用场景是什么?
CSS Grid网格布局和Flexbox弹性盒布局模型都是现代CSS布局的重要工具,它们各自具有独特的优势和适用场景。 作为前端开发工程师,理解这些布局模型的差异和适用场景对于编写高效、可维护的代码至关重要。 CSS Grid网格布局 适用场景: 复杂…...
HDFS体系结构
HDFS 支持主从结 构 , 主节 点 称为 NameNode ,从节点称为 DataNode HDFS中还包含一个 SecondaryNameNode 进程,只要辅助主节点 公司BOSS:NameNode (NN) 秘书:SecondaryNameNode (2NN) 员工&a…...
AI大模型的技术突破与传媒行业变革
性能与成本:AI大模型的“双轮驱动” 过去几年,AI大模型的发展经历了从实验室到产业化的关键转折。2025年初,以DeepSeek R1为代表的模型在数学推理、代码生成等任务中表现超越国际头部产品,而训练成本仅为传统模型的几十分之一。这…...
vscode/cursor+godot C#中使用socketIO
在 Visual Studio Code(VS Code)中安装 NuGet 包(例如SocketIOClient),你可以通过以下几种方法: 方法 1:使用dotnet cli 打开终端:在 VS Code 中按下Ctrl 或者通过菜单View -> Terminal打开终端。 导…...
分段线性插值
分段线性插值 分段线性插值,就是将插值点用折线段连接起来逼近f(x)。设已知节点 a x 0 < x 1 < ⋅ ⋅ ⋅ < x n b ax_0<x_1<<x_nb ax0<x1<⋅⋅⋅<xnb上的函数值 f 0 , f 1 , . . . , f n f_0,f_1,...,f_n f0,f1,...,fn&a…...
制作一个项目用于研究elementUI的源码
需求:修改el-tooltip的颜色,发现传递参数等方法都不太好用,也可以使用打断点的方式,但也有点麻烦,因此打算直接修改源码,把组件逻辑给修改了 第一步下载源码 源码地址 GitHub - ElemeFE/element: A Vue.j…...
[AI]从零开始的llama.cpp部署与DeepSeek格式转换、量化、运行教程
一、前言 在上一次的DeepSeek的部署教程中,我们使用Ollama与LM Studio很轻松的部署了DeepSeek并且也完成了相关API的调用,如果还有不会的小伙伴请看下面的教程: DeepSeek本地部署:[AI]从零开始的DeepSeek本地部署及本地API调用教…...
vLLM专题(二):安装-CPU
vLLM 是一个 Python 库,支持以下 CPU 变体。选择您的 CPU 类型以查看供应商特定的说明: Intel/AMD x86 vLLM 最初支持在 x86 CPU 平台上进行基本模型推理和服务,支持的数据类型包括 FP32、FP16 和 BF16。 注意 此设备没有预构建的 wheel 包或镜像,因此您必须从源代码构建 v…...
JVM 底层探秘:对象创建的详细流程、内存分配机制解析以及线程安全保障策略
文章目录 1. 类加载检查2. 内存分配① 指针碰撞② 空闲列表线程安全问题: 3. 内存空间初始化4. 对象头设置5. 对象初始化 当Java虚拟机遇到一条 new指令时,会执行以下步骤来创建对象: 1. 类加载检查 首先检查new指令的参数是否能在常量池中…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter14-DOM
十四、DOM 文档对象模型(DOM,Document Object Model)是 HTML 和 XML 文档的编程接口。DOM 表示由多层节点构成的文档,通过它开发者可以添加、删除和修改页面的各个部分。脱胎于网景和微软早期的动态 HTML(DHTML&#x…...
外汇掉期(FX Swap):全球企业管理外汇风险的关键工具(中英双语)
外汇掉期(FX Swap):全球企业管理外汇风险的关键工具 引言 在全球化经济环境下,跨国公司、银行和金融机构经常面临外汇风险,因为它们的业务涉及多种货币。例如,一家中国公司可能需要欧元支付欧洲供应商&am…...
verilog程序设计及SystemVerilog验证
1.Verilog测试程序设计基础 1.1Testbench及其结构 在仿真的时候Testbench用来产生测试激励给待验证设计( Design Under Verification, DUV),或者称为待测设计(Design UnderTest, DUT) 。 测试程序的一般结构: Testbench是一个测试平台,信号…...
Unity DeepSeek API 聊天接入教程(0基础教学)
Unity DeepSeek API 聊天接入教程(0基础教学) 1.DeepSeek 介绍 DeepSeek是杭州深度求索人工智能基础技术研究有限公司推出的一款大语言模型。2025年1月20日,DeepSeek-R1正式上线,和当前市面上的主流AI相比,它在仅有极少标注数据的情况下&am…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...
RKNN开发环境搭建2-RKNN Model Zoo 环境搭建
目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. 本…...
前端异步编程全场景解读
前端异步编程是现代Web开发的核心,它解决了浏览器单线程执行带来的UI阻塞问题。以下从多个维度进行深度解析: 一、异步编程的核心概念 JavaScript的执行环境是单线程的,这意味着在同一时间只能执行一个任务。为了不阻塞主线程,J…...
