2011-09-20 38 views
0

我想用Java發送POST請求。此刻,我不喜歡這樣寫道:發送Java POST請求時未調用getInputStream()

URL url = new URL("myurl"); 
URLConnection con = url.openConnection(); 
con.setDoOutput(true); 
PrintStream ps = new PrintStream(con.getOutputStream()); 
ps.println("key=" + URLEncoder.encode("value")); 
// we have to get the input stream in order to actually send the request 
con.getInputStream(); 
ps.close(); 

我不明白爲什麼我要叫con.getInputStream(),以實際發送請求。如果我不叫它,請求不會被髮送。

使用PrintStream有問題嗎?如果我使用PrintStream,PrintWriter或其他東西,對嗎?

+0

嘗試用'ps.flush()'替換那個調用。 –

+0

我已經試過了,但沒有幫助。每次調用ps.println()都會調用flush()... – Simon

+1

對不起,現在我找到了我的問題的答案:http://stackoverflow.com/questions/4844535/why-do-you-have-to- call-urlconnectiongetinputstreamstream-to-be-able-to-out-to-u/4844926#4844926 – Simon

回答

0

我想另一個線程的帖子回答了我的問題。對不起,但我發現它太晚了。你可以找到它here

PS:不幸的是,Stackoverflow添加了我的最後一個答案作爲評論的問題,因爲我的回答太短。並且不可能將評論標記爲正確的答案...希望這個足夠長:-)

0

網址代表某些來源。

URLConnection表示到資源的連接。

你需要調用connection.connect()來連接連接

+0

我認爲connect()會在需要時自動調用... – Simon

+0

yes,openConnection是一個糟糕的api名稱。 。 – swanliu

0

嘗試寫到輸出之前添加

con.setDoInput (false);

P.S .:你也應該像swanliu所說的那樣調用con.connect()。

更新
這是我想出了


    private static final void sendPostRequest (final String urlAddress, String key, String value) throws Exception 
    { 
     URL url = new URL (urlAddress); 
     URLConnection con = url.openConnection(); 
     con.setDoOutput (true); 
     con.setDoInput (false); 
     PrintStream ps = new PrintStream (con.getOutputStream()); 
     ps.println (key + "=" + URLEncoder.encode (value, "UTF-8")); 
     ps.flush(); 
     con.connect(); 
     ps.close(); 
    } 

我使用Wireshark檢查TCP連接正在建立和封閉。但不知道如何檢查服務器是否收到請求。 如果你有一個快速的方法來檢查它,你可以嘗試該代碼。

+0

不幸的是,這沒有工作... – Simon