Java HTTP Post - 奇怪的流行为

标签 java http networking post

我在使用 java 处理 HTTP post 时遇到了奇怪的流行为。事情是这样的:

Func() {
    String data = “MyMessage”
    URL url = new URL("http://edsall:8080"); 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 

    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

    wr.write(data); 
    wr.flush();         

    // Get the response 
    String line; 
    while ((line = rd.readLine()) != null) { 
    } 

    wr.close();
    rd.close();
}

Request recvd by the server:
POST / HTTP/1.1
User-Agent: Java/1.6.0_20
Host: edsall:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 0

观察内容长度始终为0。起初,我无法弄清楚问题出在哪里。最后,以下重新安排的代码起到了作用:

Func() {
    …
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.write(data); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    …
}

这个我不是很清楚。打开输入流的句柄如何影响输出流?

最佳答案

打开输入流(或查询状态)“提交”请求——即将请求发送到服务器。

我不确定您写入输出流的数据发生了什么(如果它实际上没有被发送,我希望有一个异常(exception)),但是发送了内容长度 header (长度为为零)当 getInputStream() 被调用时。

必须在访问响应的任何部分之前发送整个请求。这是正常的 URLConnection 行为。

关于Java HTTP Post - 奇怪的流行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3548460/

相关文章:

Java System.getEnv()

java - 如何在android中将颜色资源设置为墙纸?

http - 在 Nginx 中限制 http 请求

java - 当我在 ObjectInputStream 上调用 readObject() 时出现 ClassNotFoundException

linux - 如何阻止 fork 炸弹

java - Swing , 多屏 , 控制权转移

java - Docker:将 Spring Boot 容器与 Mongo DB 容器链接起来

linux - 通过网络将特定路由 Ping 回不同接口(interface)上的同一台计算机

php - 按钮停止发出 POST 请求

java HTTPConnection 连接到 ip