簡體   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