HttpClient Not in GZIP format的解决办法

jmeter报错: java.io.EOFException: Unexpected end of ZLIB input stream 阅读详情

在用HttpClient抓取图片的过程中,提示如下错误:

Exception in thread "main" java.util.zip.ZipException: Not in GZIP format
    at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:165)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:79)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:91)
    at org.apache.http.client.protocol.ResponseContentEncoding$1.create(ResponseContentEncoding.java:68)
    at org.apache.http.client.entity.LazyDecompressingInputStream.initWrapper(LazyDecompressingInputStream.java:51)
    at org.apache.http.client.entity.LazyDecompressingInputStream.read(LazyDecompressingInputStream.java:63)
    at com.didichuxing.upload.TestUploadFile.main(TestUploadFile.java:53)

通过阅读异常堆栈的相关源码发现,由于HTTP请求头部信息包含“Content-Encoding: “compress,gzip””内容,导致HttpClient会根据“Content-Encoding”包装返回的InputStream,相关源码如下:

//  节选,详见org.apache.http.client.protocol.ResponseContentEncoding
final Header ceheader = entity.getContentEncoding();
// ……
// 有忽略
final InputStreamFactory decoderFactory = decoderRegistry.lookup(codecname);

所以相关的解决办法有两种。

1. 客户端解决办法

诊断HTTP请求,关键在于头部信息:

“Content-Encoding”, “compress,gzip”

但可惜的是,客户端没有修改HTTP头信息的能力(只有读的权限),所以必须在HttpClient用GZIP处理之前获取流,方法如下:

CloseableHttpClient httpclient = HttpClients.custom().addInterceptorFirst(new HttpResponseInterceptor() {

    @Override
    public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
        HttpEntity resEntity = response.getEntity();
        // 在此处消费InputStream
        BufferedInputStream ins = new BufferedInputStream(resEntity.getContent());
        FileOutputStream fos = new FileOutputStream("water1.png");
        byte[] buffer = new byte[4096];
        int len = 0;
        while((len = ins.read(buffer)) > -1) {
            fos.write(buffer, 0, len);
        }
        fos.close();
    }
}).build();

总结下,几乎此错误的所有根源都来源于HttpClient的默认构造,如下:

//  通用的作用,但不适用于所有的情况
CloseableHttpClient httpclient = HttpClients.createDefault();

2. 服务端解决办法

服务端解决办法很简单,但唯一的问题在于,你需要有服务端修改代码的权限,如下:

//  不要启用此模式
//  response.setHeader("Content-Encoding", "compress,gzip");
//  改为普通的流模式
response.setHeader("Content-Encoding", "application/octet-stream");

突然想起一个笑话:

专家吹牛,说天朝的神弹是如何如何的厉害,只需要一架战机飞到美帝白宫上空,即可将白宫炸为一片白地。那问题来了,战机怎么去哪里呢?

还有一种方法,就是服务器端真正支持GZip模式,详细请见《设置TOMCAT启用GZIP压缩》[我试了几次,似乎效果并不好,尤其是对图片的支持]。

3. 其他

利用JAVA HttpClient自动上传文件及抓取文件,详细内容见下:
1. HTTP客户端上传文件的办法
2. 改进的HTTP客户端上传文件的办法

4. 参考文档

  1. HttpClient Tutorial;
  2. HttpClient Examples
.NET技术博客与程序员职业成长手记 .NET技术博客不仅是代码实践记录,更是面向中级及以上开发者的系统性技术认知体系构建载体。它从委托与事件的IL指令差异、ASP.NET Core中间件管道的RequestDelegate嵌套机制等底层原理切入,揭示框架设计背后的权衡逻辑与工程约束,强调技术人格化表达与可迁移的元能力培养。通过真实生产事故驱动的内容选题、三重交叉验证的技术准确性保障,以及Span<T>、HttpClientFactory等高频组件的深度归因分析,帮助开发者跨越‘会写代码’到‘可交付可靠系统’的能力断层,在性能归因、系统交互与抽 阅读详情

相关推荐

Exception in thread “main“ java.util.zip.ZipException: zip END header not found问题的解决

Flutter打包安卓APK时出现"zip END header not found"错误,原因是Gradle的zip文件下载不完整。解决方法是将/android/gradle/gradle-wrapper.properties文件中的distributionUrl从网络地址改为本地文件路径(如file:///D:/gradle-8.10.2-all.zip),并手动下载完整的gradle压缩包。该错误通常由网络问题导致境外资源下载不完整引起。

qq_30279827的博客 597

Exception in thread “main“ java.util.zip.ZipException: zip END header not found

Android 、Flutter 在打包或者运行的时候报错

代码小疯子 1万+

Exception in thread “main“ java.util.InputMismatchException.pdf

Exception in thread “main“ java.util.InputMismatchException

Linux tar打包命令详解

Linux 系统中,最常用的归档(打包)命令就是 tar,该命令可以将许多文件一起保存到一个单独的磁带或磁盘中进行归档。不仅如此,该命令还可以从归档文件中还原所需文件,也就是打包的反过程,称为解打包。 使用 tar 命令归档的包通常称为 tar 包(tar 包文件都是以“.tar”结尾的)。 tar命令做打包操作 当 tar 命令用于打包操作时,该命令的基本格式为: [root@lo...

大数据linux基础学习 5万+

如何在 Ubuntu 24.04 或 22.04 上安装和使用 GDebi

本文介绍了在Ubuntu 24.04上安装和使用GDebi的方法。GDebi是DPKG的轻量级替代品,能够自动解析并安装.deb包的依赖项。文章详细说明了系统更新、安装GDebi的步骤,并演示了通过GUI和CLI两种方式安装.deb包的操作流程。此外,还提供了验证安装和卸载包的方法。GDebi虽然非必需,但为用户提供了处理依赖项的另一种选择,适合需要安装本地Debian包的用户。

山岚的运维笔记 1981

Vlan的封装模式和端口讲解(Access、Trunk、Hypbrid端口)

Vlan(Virtual Local Area Network)虚拟局域网,将一个物理的LAN在逻辑上划分为多个广播域,在交换机上实现广播域隔离(增强局域网的安全性、限制广播风暴、简化网络管理)Vlan通过将二层数据帧打上Vlan标签(打上Vlan标签也就是封装Vlan),正常情况下,不同Vlan Tag的数据包是无法二层直接互访的,以此来实现广播域的隔离可以理解为一个Vlan对应一个广播域,同一Vlan内的主机可以二层直接通信,不同Vlan间的主机无法二层直接通信。

m0_49864110的博客 5642

java.util.zip.zipeception:Not in GZIP format解决办法

java.util.zip.zipeception:Not in GZIP format

w先生的博客 3621

从零到英雄:WSL2与Ubuntu22.04的终极性能调优指南

本文详细介绍了如何在Windows系统中通过WSL2与Ubuntu22.04进行性能调优,涵盖内核定制、GPU加速、网络优化等关键技巧,帮助开发者打造媲美原生Linux的高性能开发环境,特别适合AI训练和大数据处理等资源密集型任务。

weixin_29218509的博客 523

java.util.zip.zipexception_HttpClient:java.util.zip.ZipException: Not in GZIP format

Exception:java.util.zip.ZipException: Not in GZIP formatat java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:165)at java.util.zip.GZIPInputStream.(GZIPInputStream.java:79)at java.util.zip....

weixin_36065817的博客 940

Floyd算法在社交网络中的应用:如何找到六度人脉的最短路径?

本文探讨了Floyd算法在社交网络分析中的核心应用,特别是如何利用该算法高效计算任意两人之间的最短路径,从而量化“六度人脉”理论。文章通过构建微型社交网络模型,详细拆解了Floyd算法的动态规划原理与代码实现,并展示了如何从计算出的最短路径距离矩阵中挖掘节点中心性、识别社群等关键洞察,为社交推荐、影响力分析等场景提供技术支撑。

blockchain9miner的博客 1002

从 SOAUTH2 到系统用户,SAP AS ABAP 里配置 OAuth 2.0 Client 的完整落地思路

SAP OAuth 2.0客户端配置的核心在于建立系统级信任关系。在AS ABAP中,每个OAuth 2.0客户端必须关联一个System类型的用户账号(通过SU01创建),并建议采用业务语义明确的命名规范(如ZBTP_PO_APPROVAL_APP)。关键配置包括:客户端认证方式(推荐SSL证书而非共享密钥)、Token生命周期(默认3600秒)、Scope访问范围,以及根据应用场景选择Authorization Code或SAML 2.0 Bearer等授权模式。项目实践中应避免混合配置不同授权类型,而

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 987

Httpclient 以multipart/form-data形式post上传文件及提交参数

在大学里由于要做某些英语听力作业,是在PC客户端上的,而做完提交后显示的答案又没办法复制,再重新填写的话答案就消失了,所以懒得去记,好在答案图片并不复杂,便想做一个可以识别出图片中的英文的小软件。因为我自己并没有做OCR的经验,于是我就到网上找可以在线识别文字的网站,找着找着找到了一个不错的网站,识别速度很快,还是免费的,因此开始下手。首先例行f12,打开调试窗口,然而没有发现请求参数,而是看到了...

More than coding 5万+

图像算法中的 Blob 分析

在计算机视觉中,Blob 可以理解为在图像中具有相似性质(如颜色、亮度等)的像素群体。Blob 通常用作基本单元,在图像分析和处理任务中能够提取出有意义的特征。

m0_44975814的博客 2483

HttpClient爬取网页源代码

package util; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.text.DateFormat;import java.text.SimpleDateForm...

facekindle的专栏 184

阿里云百炼全解析:一站式大模型开发平台的架构与行业实践

摘要: 阿里云百炼平台通过一站式架构革新大模型开发范式,将传统碎片化工具链整合为统一工作流,实现开发周期从月级到小时级的跃迁。其核心架构包含接入层、引擎层与资源层,关键技术突破包括MCP服务协议、多模态引擎及高性能训练优化。平台提供全生命周期开发支持,从数据准备到模型部署,并通过VPC隔离、数据加密构建企业级安全体系。已在医疗、电力等行业实现显著增效,如阿斯利康药物分析系统准确率提升至95%。未来将向多Agent协同、边缘计算等方向演进,推动AI技术深度融入产业核心。

fudaihb的博客 1988

Python 爬虫实战:共享单车数据采集全流程与市场洞察深度剖析

本文介绍了如何利用Python爬虫技术获取和分析共享单车运营数据。文章从项目背景出发,详细阐述了系统架构设计,包括数据抓取、清洗存储、分析和可视化模块。通过Scrapy、BeautifulSoup等工具实现数据采集,使用Pandas进行数据清洗,并借助Matplotlib进行可视化分析。实战部分展示了爬虫代码示例和城市分布、使用频率等分析案例。最终指出数据驱动分析有助于了解行业现状和市场趋势,未来可结合机器学习等方法进行深入洞察。该技术方案为共享单车行业研究提供了有效的数据支持。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2232

Android’s HTTP Clients (httpClient 和 httpURLConnect 区别)

来源自:http://android-developers.blogspot.jp/2011/09/androids-http-clients.html Most network-connected Android apps will use HTTP to send and receive data. Android includes two HTTP clients: HttpURL...

weixin_34262482的博客 86

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java写入Doris全方案演进汇总(原生HTTP|高阶封装|官方SDK|第三方生态SDK|终极选型对比)

✅ 优点:零依赖、最轻量、任何环境可运行❌ 缺点:无连接池、频繁创建销毁连接、无失败重试、不处理FE307重定向、不支持GZIP压缩、无日志、无异常兜底、不支持高并发如果不写重定向,http客户端底层会自动请求,但是有概率丢失请求头,自定义Heade,丢失报文等,所以不推荐生产使用1、极致精简:删除冗余重复代码、统一工具方法、结构清晰,无多余逻辑2、注释全覆盖:每一个请求头、每一步逻辑、核心机制全部附带通俗释义,新手也能看懂3、补齐完整调用Demo:含Authorization鉴权生成、

苍煜 529

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java网络编程核心技术与实战指南

网络编程作为分布式系统的基础能力,其核心在于通过TCP/UDP协议实现进程间通信。TCP协议提供可靠的数据流传输,通过三次握手建立稳定连接,适合文件传输等场景;UDP协议则提供无连接的报文传输,具备更低延迟,常用于视频流和DNS查询。Java通过java.net包提供完整的Socket API支持,配合NIO的多路复用机制可大幅提升并发性能。在微服务和云原生架构中,网络编程技术被广泛应用于RPC调用、服务发现等关键环节。本文通过TCP粘包处理、NIO Selector等实战案例,深入解析Java网络编程中的

weixin_30715523的博客 364

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java 保存网页到本地_java下载html页面---把网页内容保存成本地html

我们在前面讲到httpclient抓取网页内容的时候 通常都是获取到页面的源代码content存入数据库。详见下文:那么如果我们除了获得页面源代码之外 还想把页面保存到本地存成html应该怎么做呢?其实很简单 我们先来看访问页面获取content的代码private static String getUrlContent(DefaultHttpClient httpPostClient,Strin...

weixin_32371243的博客 1289

java 读取url html 保存_java下载html页面---把网页内容保存成本地html

我们在前面讲到httpclient抓取网页内容的时候 通常都是获取到页面的源代码content存入数据库。详见下文:HTTPClient模块的HttpGet和HttpPosthttpclient常用基本抓取类那么如果我们除了获得页面源代码之外 还想把页面保存到本地存成html应该怎么做呢?其实很简单 我们先来看访问页面获取content的代码private static String getUrl...

weixin_39638057的博客 623

JMeter压测QPS上不去的五大根源与调优实战

HTTP压测中的QPS瓶颈往往并非服务端性能不足,而是源于压测工具链自身的资源约束与协议配置失当。理解JMeter线程模型、连接池管理、操作系统文件描述符限制及TCP网络栈行为,是突破性能天花板的关键。JMeter默认配置为兼容性牺牲效率,如HttpURLConnection连接复用策略保守、Keep-Alive未显式控制、View Results Tree监听器引发内存泄漏等,均会显著拖累实际吞吐。结合CLI模式执行、连接池调优、ulimit扩容与协议头精细化控制,可系统性释放QPS潜力。本文聚焦JMet

weixin_30781107的博客 428

碧蓝航线自动脚本 Alas 完整使用指南:委托、科研、大世界全自动接管

AzurLaneAutoScript(玩家社区常称 Alas)是一款开源的碧蓝航线自动脚本,支持国服、国际服、日服与台服。它通过 ADB 连接模拟器或真机,靠屏幕识别模拟点击,把委托、科研、大世界等重复劳动全部代管。 ## 一、Alas 能替你省掉哪些重复劳动 装上之后你会得到一个带图形界面的控制端,任务按四个分组排列,每一项都可以单独开关: - **出击**:主线图、活动图、共斗活动、紧急

gitblog_00447的博客 972

milvus+elasticsearch+ollama实现企业级RAG搭建

1. 数据索引阶段2. 用户查询与检索阶段par[并行检索]3. 融合与重排序4. 生成回答文档切块(Chunking)调用 Embedding 模型存储文本块与嵌入向量存储文本块与嵌入向量输入问题(Query)调用 Embedding 模型关键词检索返回相关文本块 (BM25)向量检索返回相关文本块 (语义)融合结果 (RRF/加权)调用 Reranker 模型返回重排序后的Top-K结果构建提示词(Prompt) + 上下文生成最终回答返回回答 ollam+llm milvus安装 ik分词器

青龙小码农 543

从Socket编程到HTTP客户端:C++实现GET/POST请求与网络调试

网络通信是现代软件开发的基础,其核心是建立在TCP/IP协议栈之上的应用层协议。HTTP作为最广泛使用的应用层协议,规定了客户端与服务器之间请求与响应的标准格式。理解HTTP协议的原理,对于排查网络问题、优化应用性能至关重要。通过Socket编程直接实现HTTP客户端,能够深入掌握请求报文组装、响应解析、连接管理等底层细节,这是理解网络库工作原理和调试复杂网络问题的关键技能。在实践中,开发者常遇到如502 Bad Gateway、连接超时等错误,这些往往与请求头格式、TCP连接状态或代理配置相关。本文通过C

weixin_30312563的博客 314
上一篇: 一则“HTTP 405 Method Not Allowed”的解决办法
下一篇: Mac OS上安装MySQL_python
蚁方阵
博客等级 码龄11年 505粉丝 366原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值