Java:使用HttpURLConnection发送请求时报文体为什么会为空?

最近使用java.net.HttpURLConnection做一些简单的测试程序,发现发送的报文体为空:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpURLConnectionTester {private HttpURLConnection connectServerConn() throws IOException {// set ServerServlet URLString urlPath = "http://127.0.0.1"+ ":7010" //+ "/wtcapp" //+ "/server";URL url = new URL(urlPath);HttpURLConnection conn = (HttpURLConnection) url.openConnection();System.out.println("HttpURLConnection: " + conn.getClass());conn.setDoOutput(true);conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "text/plain");conn.connect();return conn;}public void doTest01() {try {HttpURLConnection conn = connectServerConn();OutputStream output = conn.getOutputStream();InputStream input = conn.getInputStream();     // (1)output.write("hello ".getBytes());output.flush();Thread.sleep(3000);output.write("world!".getBytes());output.flush();output.close();// (2)StringBuffer ret = new StringBuffer();int r = input.read();while (r != -1) {ret.append((char) r);r = input.read();}System.out.println("ret:" + ret);input.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {HttpURLConnectionTester tester = new HttpURLConnectionTester();tester.doTest01();}}

截取报文发现:

POST /wtcapp/server HTTP/1.1
Content-Type: text/plain
User-Agent: Java/1.8.0_261
Host: 127.0.0.1:7010
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 0

 Content-Length为0,报文体为空。

经过研究发现,只要把(1)行的代码,移动到(2)处理,问题就解决了:

  public void doTest01() {try {HttpURLConnection conn = connectServerConn();OutputStream output = conn.getOutputStream();output.write("hello ".getBytes());output.flush();Thread.sleep(3000);output.write("world!".getBytes());output.flush();output.close();InputStream input = conn.getInputStream();StringBuffer ret = new StringBuffer();int r = input.read();while (r != -1) {ret.append((char) r);r = input.read();}System.out.println("ret:" + ret);input.close();} catch (Exception e) {e.printStackTrace();}}

 POST /wtcapp/server HTTP/1.1
Content-Type: text/plain
User-Agent: Java/1.8.0_261
Host: 127.0.0.1:7010
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 12

hello world!

查看HttpURLConnection的源代码发现,原来conn.getInputStream();时,会将前面打开的OutputStream给close掉造成的。

java.net.HttpURLConnection源代码:

https://code.yawk.at/java/8/sun/net/www/protocol/http/HttpURLConnection.java#sun.net.www.protocol.http.HttpURLConnection%23getInputStream0()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1619151.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

计算机英语文体特点,公共英语五级写作文体特点分析

公共英语五级写作文体特点分析 大家要掌握一些常见文体的写作方法和技巧。文章的常见文体有描写文(Description)、记叙文(Narration)、说明文 (Exposition)、议论文(Argumentation)、及应用文(Pratical Writing)等。各文体往往交叉使用,互相渗透。下面小编大家介绍公…

深入URP之Shader篇14: GPU Instancing

GPU Instancing 必须是同一个模型,材质也必须相同,但材质的参数可以不同(使用MaterialPropertyBlock指定),然后基于一个Instanced Draw Call,一次性绘制多个模型。 参考:https://docs.unity3d.…

9.3 功率放大电路的安全运行

在功率放大电路中,功放管既要流过大电流,又要承受高电压。例如,在 OCL 电路中,只有功放管满足式(9.2.13)所示极限值的要求,电路才能正常工作。因此,所谓功率放大电路的安全运行&…

八年终有一别

告别文章,本文应该所有的名字都会真名,我不知道侵犯权益什么的,希望不要冒犯到。 NOIp2018 提高组游记 ZJOI2019上海游族杯acm游记 绍兴一中集训记 NOI2019同步赛 day1 NOI2019同步赛 day2 绍兴一中暑假集训总结 慈溪中学集训记 CSP-S2019游…

怎么用Linux下载链接,在linux系统里,下载的迅雷专用链接!

wtf1981 于 2009-06-03 21:18:08发表: 事实看看 you_me 于 2009-05-20 19:34:17发表: 试试看吧 563909373 于 2009-05-20 19:11:23发表: 学习一下! kuiying 于 2009-05-17 21:39:25发表: 好阿 支持一下!!!!&#xff01…

如何减小迅雷下载对网络的影响

导言 很多用户都喜欢用迅雷进行各种资源的下载,因为迅雷通过镜像搜索可以同时从多个高速站点进行下载,从而达到满速下载的目的。但是,对于企业主/网管人员来说,高速下载的迅雷会占用有限的网络资源,在自己享受高速度的…

大规模 C++ 编译性能优化系统 OMAX 介绍

导读:本文探索&研究了大规模C/C服务编译性能优化相关技术,优化服务性能,降低机器成本,同时为了支持规模推广应用,降低业务线接入成本,保障优化效果,进行面向云上微服务,开展平台…

如何使用缓存优化系统性能?

缓存是我们提高系统性能的一项必不可少的技术,无论是前端、还是后端,都应用到了缓存 技术。前端使用缓存,可以降低多次请求服务的压力;后端使用缓存,可以降低数据库操作 的压力,提升读取数据的性能。 今…

关键词优化系统|智能优化「白狐公羊seo」

1.SEO的设置 。要进行SEO网站优化的前提,先设置TDK,三个重要的参数:title、keywords、description。因为TDK是一个网站优化的核心要素和重要标志。后期的优化都是围绕着TDK来进行的。设置TDK是对 网站优化排名 提升的其中一个方法。 2. 内容标题优化…

windows10 优化系统性能

以下仅供参考: 1、设置中 2、 设置中》搜索【启动应用】,关闭启动机器自动启动的应用 或者在任务管理器中 3、回收站 右键【属性】》一般设置为10G到15G之间 4、电源计划中设置高性能 考虑到个人健康 power shell命令中: 然后【更改计划】…

大规模C++编译性能优化系统OMAX介绍

导读:本文探索&研究了大规模C/C服务编译性能优化相关技术,优化服务性能,降低机器成本,同时为了支持规模推广应用,降低业务线接入成本,保障优化效果,进行面向云上微服务,开展平台…

系统优化方案

亲爱的用户,当您觉得计算机速度过慢,或者您想清理系统垃圾的话,您只需按照以下步骤操作即可哦(^U^)ノ~YO 一、手动清除系统盘的缓存文件: 打开桌面【此电脑】图标&#x…

如何进行系统性能优化

前言 不战而屈人之兵,善之善者也 性能优化的第一原则是,通过测试,日志,profiling 分析出哪有问题,然后有的放失。 性能优化时持久战,在深入理解业务后,结合系统响应,系统吞吐&#…

win10计算机系统优化设置,win10系统优化系统的详细办法

作为大多数用户都使用的win10系统,如果发生对win10系统优化系统进行设置情况,会让人束手无策,那么win10系统优化系统是怎么设置的呢?如果有朋友想对win10系统优化系统进行设置的话,按照1、右键点击“此电脑”&#xff…

系统优化的方法有哪些

对于很多人来说,系统优化可能只是个概念,真正想要操作的时候却又无从下手,然后一个不小心把系统搞崩溃了又凉凉。下面就和大家简单聊聊系统优化应该从哪几个方面去操作吧。 更多系统教程尽在小白系统重装官网 系统:win10专业版 …

八 在IDEA中设置省电模式

如下图所示,IntelliJ IDEA 有一种叫做 省电模式 的状态,开启这种模式之后IntelliJ IDEA 会关掉代码检查和代码提示等功能。所以一般也可认为这是一种 阅读模式,如果你在开发过程中遇到突然代码文件不能进行检查和提示,可以来看看这…

嵌入式linux更省电,- 基于嵌入式Linux的智能手机省电设计

用户程序API, 用户程序( 应用软件) 分为三类: (1)可感知电源管理的应用软件; (2)可感知电源管理的“包装器”中的传统应用软件; (3)不带电源管理的传统应用软件。 可感知电源管理的应用软件能够充分利用来自策略管理器的API, 从而建立各自的基…

一级节能和三级节能有什么区别

等级不同:一级节能产品能源效率达国际先进水平,三级的为市场平均水平。能耗量不同:一级和三级节能产品全年耗电量分别为634度781度。省电程度不同:同规格产品在同样条件下,一级节能产品比三级的节能15%左右。 以变频空…

计算机系统节能减排,节能减排,我们怎么做?

原标题:节能减排,我们怎么做? 节能减排 节俭但不算计,环保但不做作 节能环保已被越来越多的人接受 形成了一种特定的文化 保护环境并没有想象中的那么难 只要我们从小事做起 就会让地球母亲焕然一新 空用完拔插头,省电…

android屏幕省电,AMOLED屏幕省电吗 AMOLED屏幕耗电测评测

毫无疑问屏幕是最能够直接影响用户体验的部件之一,而关于AMOLED屏幕好还是LCD屏幕好的争论也从未停止。与LCD屏幕相比,AMOLED屏幕的最大优点之一便是在显示黑色或深色颜色时更加节能,但事实的确如此吗?而从Greenhot给出的结果来看…