2010-01-20 50 views
7

您如何做HTTP PUT?我正在使用的類似乎認爲它正在執行PUT,但終端正在將它視爲做了GET。我做錯了什麼?Java:使用HttpURLConnection的HTTP PUT

URL url = new URL("https://..."); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("PUT"); 

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); 

writer.write(xmlString); 
writer.close(); 

System.out.println(conn.getRequestMethod()); 
String response = readInputStream(conn.getInputStream()); 
System.out.println(response); 

正在打印:

PUT 
<same content as doing a GET> 

我寧願不包括其他圖書館,如果這一個可以工作...

回答

5

有一個簡單的方法來了解一下:運行Wireshark看看什麼是實際上發生在網絡上。我發現這是診斷這類問題最可靠的方法 - 客戶端可能有錯誤,庫可能有錯誤,服務器可能有錯誤,但Wireshark會告訴你實際發生了什麼。

編輯:好的,對於HTTPS它有點棘手。如果您在Windows上運行代理,您可以使用Fiddler - 如果您可以說服您的客戶端代碼接受其證書,那麼它可以應對HTTPS,但這會更具侵入性......將代理放在明確的位置改變流量的樣子。

如果您可以通過HTTP與服務器的調試版本進行對話,那將會更好。您的情況是否可行,或者服務器完全不在您的控制範圍之內?

+0

我所有的流量都是https到遠程服務器......而wireshark在那裏看不到太多內容。用curl和java打對數看起來不一樣,但是我應該找什麼? – 2010-01-20 07:35:26

+0

好主意。我聯繫了他們並獲得了一個HTTP服務器進行測試。我發現我的問題是缺少被服務器拒絕的Content-Type標頭。非常感謝。 – 2010-01-20 08:08:07