Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaHTTPPOST-奇怪的流行为_Java_Http_Networking_Post - Fatal编程技术网

JavaHTTPPOST-奇怪的流行为

JavaHTTPPOST-奇怪的流行为,java,http,networking,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 OutputStreamWr

我在使用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()));
    …
}
我不能清楚地理解这一点。打开输入流的句柄如何影响输出流

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

我不确定您写入输出流的数据发生了什么情况(如果它没有实际发送,我希望会出现异常),但调用
getInputStream()
时会发送内容长度头(长度为零)

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

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

我不确定您写入输出流的数据发生了什么情况(如果它没有实际发送,我希望会出现异常),但调用
getInputStream()
时会发送内容长度头(长度为零)


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

移除刷新并将wr.close()放置到位。

移除刷新并将wr.close()放置到位