org.apache.http.ConnectionClosedException Premature end of Content-Length delimited message body

这篇具有很好参考价值的文章主要介绍了org.apache.http.ConnectionClosedException Premature end of Content-Length delimited message body。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近生产环境报了这个系统异常:

org.apache.http.ConnectionClosedException Premature end of Content-Length delimited message body (expected 107915; received 40177)

查看日志后发现是下载文件的时候出错。

具体的代码如下:

StringEntity entityParams = new StringEntity(requestXml, "utf-8");
			HttpPost httpPost = new HttpPost(serverUrl);
			httpPost.setEntity(entityParams);
			httpPost.setHeader("Content-Type", "text/xml;charset=ISO-8859-1");
			client = HttpClients.createDefault();
			// 向威富通发送对账请求,并获取结果
			response = client.execute(httpPost);

在向威富通发送请求的时候有下载文件的操作,出现了该问题。

起初是怀疑http的超时时间过短导致了该问题,由于默认的时间是30s,并且我们接收到的没有到总的1/2(4w/10w),所以将超时时间设置为了120s,修改后的代码如下:

StringEntity entityParams = new StringEntity(requestXml, "utf-8");
			HttpPost httpPost = new HttpPost(serverUrl);
			RequestConfig config = RequestConfig.custom().setSocketTimeout(120000).setConnectTimeout(120000).build();
			httpPost.setConfig(config);
			httpPost.setEntity(entityParams);
			httpPost.setHeader("Content-Type", "text/xml;charset=ISO-8859-1");
			client = HttpClients.createDefault();
			// 向威富通发送对账请求,并获取结果
			response = client.execute(httpPost);

但是在重新执行该代码的时候还是报同样的问题,修改tomcat和nginx的超时时间都没有解决该问题。另外有一些细节需要注意:

1.多次下载同一个文件时的received都是40177。

2.第二天的文件更大,达到了15w,此时的received仍然是40177。

所以有很大的理由来怀疑是Nginx的缓冲区大小导致了该问题。

在Nginx的配置文件中(http内server外)加入以下代码:

sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    #以上为系统自带 以下为自己添加
    proxy_buffering on;
    proxy_buffer_size 64k;
    proxy_buffers 8 32k;
    proxy_temp_path proxy_temp 1 2;
    proxy_request_buffreing on;
    proxy_read_timeout 300s;
    proxy_send_timout 300s;

然后重新执行这段代码得以解决该问题。

参考文章:记一个 httpclient 神坑 - 掘金 (juejin.cn)文章来源地址https://www.toymoban.com/news/detail-431357.html

到了这里,关于org.apache.http.ConnectionClosedException Premature end of Content-Length delimited message body的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包