[英]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.