Python 实现POST上行压缩上传可用HTTP库汇总

发布时间:2026/11/6 19:17:39

Python 实现POST上行压缩上传可用HTTP库汇总 先重申核心原理上行请求体压缩不是HTTP库自带功能本质是你自己把body gzip压缩带上Content-Encoding: gzip请求头将压缩二进制作为请求体发送。所有支持自定义请求body、自定义请求头的HTTP客户端都能实现区别只是各个库传参名称不一样requestsdatahttpxcontentaiohttpdataurllibdatapycurlPOSTFIELDS下面分「同步库」「异步库」给出完整示例统一复用gzip压缩函数。通用压缩工具函数所有示例共用importgzipfromioimportBytesIOdefgzip_compress(raw_bytes:bytes)-bytes:bufBytesIO()withgzip.GzipFile(fileobjbuf,modewb)asf:f.write(raw_bytes)returnbuf.getvalue()一、标准库urllib无需额外安装内置无需安装第三方包适合环境受限不能装requests的场景importjsonfromurllibimportrequest urlhttp://127.0.0.1:8000/api/uploadpayload{data:list(range(2000))}rawjson.dumps(payload).encode(utf-8)compressed_bodygzip_compress(raw)headers{Content-Type:application/json; charsetutf-8,Content-Encoding:gzip}reqrequest.Request(url,datacompressed_body,headersheaders,methodPOST)withrequest.urlopen(req)asresp:print(resp.read().decode(utf-8))缺点API简陋不支持连接池、超时易用性差生产一般不首选。二、httpx同步 异步当前主流推荐新一代HTTP客户端兼容requests风格支持http1.1/http2importhttpximportjson urlhttp://127.0.0.1:8000/api/uploadpayload{data:list(range(2000))}rawjson.dumps(payload).encode(utf-8)compressed_bodygzip_compress(raw)headers{Content-Type:application/json; charsetutf-8,Content-Encoding:gzip}# 同步withhttpx.Client(timeout10)asclient:resclient.post(url,headersheaders,contentcompressed_body)print(res.text)# 异步版本 import asyncio async def run(): async with httpx.AsyncClient(timeout10) as client: res await client.post(url, headersheaders, contentcompressed_body) print(res.text) asyncio.run(run()) ⚠️ httpx 传二进制body参数名是content不是data三、aiohttp异步首选高并发场景异步生态标准HTTP客户端爬虫、异步微服务大量使用importaiohttpimportasyncioimportjsonasyncdefmain():urlhttp://127.0.0.1:8000/api/uploadpayload{data:list(range(2000))}rawjson.dumps(payload).encode(utf-8)compressed_bodygzip_compress(raw)headers{Content-Type:application/json; charsetutf-8,Content-Encoding:gzip}asyncwithaiohttp.ClientSession()assession:asyncwithsession.post(url,datacompressed_body,headersheaders)asresp:print(awaitresp.text())asyncio.run(main())四、pycurl底层封装libcurl高性能基于C库libcurl吞吐性能极强适合超高并发场景缺点Windows安装麻烦、API晦涩importpycurlimportjsonfromioimportBytesIO urlhttp://127.0.0.1:8000/api/uploadpayload{data:list(range(2000))}rawjson.dumps(payload).encode(utf-8)compressed_bodygzip_compress(raw)resp_bufferBytesIO()cpycurl.Curl()c.setopt(c.URL,url)c.setopt(c.POST,1)c.setopt(c.POSTFIELDS,compressed_body)c.setopt(c.WRITEDATA,resp_buffer)headers[Content-Type: application/json; charsetutf-8,Content-Encoding: gzip]c.setopt(c.HTTPHEADER,headers)c.perform()c.close()print(resp_buffer.getvalue().decode())五、tornado.httpclientTornado框架内置异步客户端如果你项目本身使用Tornado Web框架可以直接使用内置客户端无需额外依赖importjsonfromtornado.httpclientimportAsyncHTTPClient,HTTPRequestimporttornado.ioloopasyncdeffetch():urlhttp://127.0.0.1:8000/api/uploadpayload{data:list(range(2000))}rawjson.dumps(payload).encode(utf-8)compressed_bodygzip_compress(raw)reqHTTPRequest(url,methodPOST,bodycompressed_body,headers{Content-Type:application/json; charsetutf-8,Content-Encoding:gzip})clientAsyncHTTPClient()resawaitclient.fetch(req)print(res.body.decode())tornado.ioloop.IOLoop.current().run_sync(fetch)关键共性注意事项所有库通用不要使用框架自带json参数例如httpx.post(json{})、requests.post(json{})这类接口会自动编码无法替换成压缩二进制必须手动序列化使用原始body参数。下行压缩 ≠ 上行压缩Accept-Encoding只是告诉服务端我能接收压缩响应Content-Encoding: gzip才代表本次请求body已经压缩。服务端必须手动解压绝大多数Web框架默认不会自动解压带有Content-Encoding的请求体缺少解压代码会直接收到乱码二进制。库选型建议新项目、同步异步都需要 →httpx纯异步高并发服务/爬虫 →aiohttp不能安装第三方包、极简环境 →urllib标准库极致性能、熟悉libcurl →pycurl老旧项目维持现状 → requests
延伸阅读

更多相关文章

2026/11/5 19:31:55

C++移动语义:从右值引用到高效资源管理

1. 项目概述&#xff1a;为什么我们需要“移动”&#xff1f; 如果你写过一段时间的C&#xff0c;尤其是处理过包含动态内存、文件句柄或者网络连接这类“资源”的类&#xff0c;那你一定对深拷贝带来的性能开销深有感触。想象一下&#xff0c;你有一个 std::vector<std::s…

2026/10/26 17:37:30

PAT甲级 1054 The Dominant Color 找出最多的像素颜色 map打点

Solution&#xff1a; 题目要求&#xff1a;给出一个m x n 的矩阵&#xff0c;每个元素的值代表一种像素颜色&#xff0c;求像素颜色最多的点的颜色。map直接打点就行了。 代码如下&#xff1a; //找出最多的像素颜色、map打点 #include<iostream> #include<math.h>…

2026/11/7 12:34:17

东莞常平电工证补办别怕学历不高,电子证书也能轻松拿

东莞常平电工证补办别怕学历不高,电子证书也能轻松拿 学历不高怕报不上名?东莞常平电工证补办其实没那么难,电子证书已经成为主流,只要流程走对,资料准备齐全,完全不用担心。今天就通过一个真实案例,带大家了解电工证补办的全过程,包括证书变更、注销…

2026/11/7 12:34:17

东莞常平电工证补办怎么操作?上岗必备流程全解析

东莞常平电工证补办怎么操作?上岗必备流程全解析 工地太忙根本没时间复习考试,东莞常平的电工证补办成了不少工友的心头事。特别是对于在建筑、电力、安装等行业打拼的电工来说, 上岗必备…

2026/11/7 12:34:17

象州考电工证2026河南最新政策怎么应对证书过期问题

象州考电工证2026河南最新政策怎么应对证书过期问题 证书过期了不知道怎么复审延期?这事儿真不是小事,尤其是2026河南最新政策出台后,很多电工持证人都懵了。你不是一个人在战斗,很多人都在为电工证复审头疼。别慌,这篇文章就是为你准备的,教你…

2026/11/7 12:34:17

广州电工证考试合格怎么准备?2026河南最新政策有啥变化

广州电工证考试合格怎么准备?2026河南最新政策有啥变化 实操考试心里没底怕挂科?广州电工证考试合格是不少从业者关心的话题,尤其是2026年河南最新政策出台后,考试流程、内容和资格审核都有了新的变化。很多人担心新规会增加考试难度,但只要掌握…

2026/11/7 12:34:16

黄山电工证报名有效期多久?考前押题帮你轻松应对复审

黄山电工证报名有效期多久?考前押题帮你轻松应对复审 证书过期了不知道怎么复审延期?你不是一个人,这是很多电工从业者都遇到过的头疼问题。黄山电工证报名虽然看似简单,但一旦证书有效期过了,很多人却不知道怎么操作,甚至因此耽误了工作机会。特别是现…

2026/11/7 12:29:16

济阳电工证报名不复习怎么过?考前押题救你忙中抽闲

济阳电工证报名不复习怎么过?考前押题救你忙中抽闲 工地太忙根本没时间复习考试,尤其是像我们这些一线工人,天天在工地上跑,哪还有心思去背那些理论知识?但偏偏电工证是必须的, 济阳电工证报名 不是你想考就能考的, 考前押题…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代&#xff0c;基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而&#xff0c;与配合度高的人类不同&#xff0c;宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态&#xff0c;更无法控制光照环境。实际应用中&#xff0c;我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代&#xff0c;基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而&#xff0c;与配合度高的人类不同&#xff0c;宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态&#xff0c;更无法控制光照环境。实际应用中&#xff0c;我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑