最近使用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()

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

  1. java 向nodejs 发送请求简单案例

    java  向nodejs 发送请求简单案例 最近在做nodejs的东西,一直不明白java如何与nodejs建立连接,下面写了一个简单demo: nodejs端: var http = requir ...

  2. AJAX 跨域调用和 Java 跨域 发送请求

    AJAX 跨域调用 前台代码: Html代码   <script type="text/javascript" src="jquery-1.7.2.min.js&q ...

  3. Java利用HttpClient发送请求生成微信支付二维码、查询支付状态

    一.HttpClient工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache. ...

  4. 实现小程序连接服务器(Java后台)发送请求,并返回响应

    实现小程序连接服务器发送请求,并返回响应 一.思路 二.服务器端准备(Java Servlet) 三.小程序准备 四.如果是访问云服务器应该怎么办. 思路: 怎么样把javaweb项目部署到宝塔面板中 ...

  5. java根据PostMan发送请求:设置接口请求工具类。

    我们使用java代码进行接口远程调用第三方接口时,总会抒写接口代码,那么有这么多种方式进行发送请求.那我们应该怎么使用呢? 比如有webservice接口,比如有Post请求的接口,必须有Get请求的 ...

  6. postmain报400_Postman测试@RequestBody发送请求时报400错误

    postman测试@requestbody时碰到400错误 图1 原因: 传参数如果不使用@RequestBody,在使用Postman进行Post请求时,通常做法是填入key和value的值即可. ...

  7. dotnetty java netty,DotNetty发送请求的最佳实践

    长链接发送request/response时, 绝大部分包都是小包, 而每个小包都要消耗一个IP包, 成本大约是20-30us, 普通千兆网卡的pps大约是60Wpps, 所以想要提高长链接密集IO的 ...

  8. HttpURLConnection 发送http请求帮助类

    java 利用HttpURLConnection 发送http请求 提供GET / POST /上传文件/下载文件 功能 import java.io.*; import java.net.*; im ...

  9. java connection 共享_java 使用HttpURLConnection发送数据简单实例

    java 使用HttpURLConnection发送数据简单实例 每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络.请求 ...

最新文章

  1. 单目和多目视觉统一标定
  2. [RHEL5企业级Linux服务攻略]--第6季 Vsftpd服务全攻略之高级配置
  3. C++ primer 第9章 顺序容器
  4. java xml dom4j 解析_Java使用DOM4J解析XML
  5. 带你掌握不同平台下,探索JDK源码所需的native方法
  6. 谷歌大脑计划研究员Chris Olah的博客
  7. 二倍图三倍图什么意思_小程序有二倍图三倍图使用的必要吗?
  8. Gartner2021新兴技术成熟度曲线,AI与超自动化支撑数字化变革
  9. 小米oj和为零的三元组
  10. sql半小时,小时,天,月,年分组,日期函数day() 、month()、year()
  11. EPICP安装与测试
  12. 浏览器源代码下载图片原图,手把手教学
  13. 18位身份证号编码规则最后一位
  14. 递归中的return
  15. 06-python中的集合类-01
  16. 联通3G 网络设置+彩信设置
  17. Android 8.1 系统按键音
  18. Matlab图论工具箱
  19. 搞深度学习用什么笔记本最好?这份报告给你选出了性价比之王
  20. 漂亮、免费的CSS模板

热门文章

  1. vue的runtime
  2. [转载]浅谈电视剧《武林外史》之白飞飞_-刘艳红-_新浪博客
  3. Windows命令之findstr命令
  4. ubuntu1804搜狗输入法配置
  5. 解决ERROR: This script does not work on Python 2.7 The minimum supported Python version is 3.7
  6. 解决Win7文件、文件夹图标带锁问题
  7. 第十课 京都の 紅葉は 有名です
  8. 服务器指定gpu命令,用于亚马逊网络服务深度学习的10个命令行技巧
  9. 港联证券|港股拥抱特专科技企业 内资券商“修炼内功”蓄势而为
  10. 服务器主机安全风险有哪些?如何防止安全风险?