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: 12hello 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发送请求时报文体为什么会为空?相关推荐
- java 向nodejs 发送请求简单案例
java 向nodejs 发送请求简单案例 最近在做nodejs的东西,一直不明白java如何与nodejs建立连接,下面写了一个简单demo: nodejs端: var http = requir ...
- AJAX 跨域调用和 Java 跨域 发送请求
AJAX 跨域调用 前台代码: Html代码 <script type="text/javascript" src="jquery-1.7.2.min.js&q ...
- Java利用HttpClient发送请求生成微信支付二维码、查询支付状态
一.HttpClient工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache. ...
- 实现小程序连接服务器(Java后台)发送请求,并返回响应
实现小程序连接服务器发送请求,并返回响应 一.思路 二.服务器端准备(Java Servlet) 三.小程序准备 四.如果是访问云服务器应该怎么办. 思路: 怎么样把javaweb项目部署到宝塔面板中 ...
- java根据PostMan发送请求:设置接口请求工具类。
我们使用java代码进行接口远程调用第三方接口时,总会抒写接口代码,那么有这么多种方式进行发送请求.那我们应该怎么使用呢? 比如有webservice接口,比如有Post请求的接口,必须有Get请求的 ...
- postmain报400_Postman测试@RequestBody发送请求时报400错误
postman测试@requestbody时碰到400错误 图1 原因: 传参数如果不使用@RequestBody,在使用Postman进行Post请求时,通常做法是填入key和value的值即可. ...
- dotnetty java netty,DotNetty发送请求的最佳实践
长链接发送request/response时, 绝大部分包都是小包, 而每个小包都要消耗一个IP包, 成本大约是20-30us, 普通千兆网卡的pps大约是60Wpps, 所以想要提高长链接密集IO的 ...
- HttpURLConnection 发送http请求帮助类
java 利用HttpURLConnection 发送http请求 提供GET / POST /上传文件/下载文件 功能 import java.io.*; import java.net.*; im ...
- java connection 共享_java 使用HttpURLConnection发送数据简单实例
java 使用HttpURLConnection发送数据简单实例 每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络.请求 ...
最新文章
- 单目和多目视觉统一标定
- [RHEL5企业级Linux服务攻略]--第6季 Vsftpd服务全攻略之高级配置
- C++ primer 第9章 顺序容器
- java xml dom4j 解析_Java使用DOM4J解析XML
- 带你掌握不同平台下,探索JDK源码所需的native方法
- 谷歌大脑计划研究员Chris Olah的博客
- 二倍图三倍图什么意思_小程序有二倍图三倍图使用的必要吗?
- Gartner2021新兴技术成熟度曲线,AI与超自动化支撑数字化变革
- 小米oj和为零的三元组
- sql半小时,小时,天,月,年分组,日期函数day() 、month()、year()
- EPICP安装与测试
- 浏览器源代码下载图片原图,手把手教学
- 18位身份证号编码规则最后一位
- 递归中的return
- 06-python中的集合类-01
- 联通3G 网络设置+彩信设置
- Android 8.1 系统按键音
- Matlab图论工具箱
- 搞深度学习用什么笔记本最好?这份报告给你选出了性价比之王
- 漂亮、免费的CSS模板
热门文章
- vue的runtime
- [转载]浅谈电视剧《武林外史》之白飞飞_-刘艳红-_新浪博客
- Windows命令之findstr命令
- ubuntu1804搜狗输入法配置
- 解决ERROR: This script does not work on Python 2.7 The minimum supported Python version is 3.7
- 解决Win7文件、文件夹图标带锁问题
- 第十课 京都の 紅葉は 有名です
- 服务器指定gpu命令,用于亚马逊网络服务深度学习的10个命令行技巧
- 港联证券|港股拥抱特专科技企业 内资券商“修炼内功”蓄势而为
- 服务器主机安全风险有哪些?如何防止安全风险?