繁体   English   中英

Java HTTP Post-奇怪的流行为

[英]Java HTTP Post - weird stream behavior

我在使用Java进行HTTP发布时遇到了奇怪的流行为。 这是发生了什么:

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()));
    …
}

我无法清楚地理解这一点。 打开输入流的句柄如何影响输出流?

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

我不确定写到输出流的数据发生了什么(如果没有真正发送,我希望有一个例外),但是发送了内容长度标头(长度为零)调用getInputStream()时。

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

移除冲洗并将wr.close()放在其位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM