2010-01-20 39 views
7

Nasıl bir HTTP PUT yaparsınız? Kullandığım sınıf bir PUT yapıyormuş gibi görünüyor ama son nokta bir GET yapmış gibi davranıyor. Yanlış bir şey yapıyorum? olduğuJava: HTTP PUT ile HttpURLConnection

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); 

baskı: bu seferki işe yarayabilir eğer yerine başka kütüphane istemem

PUT 
<same content as doing a GET> 

...

cevap

5

öğrenmek için kolay bir yolu var: Wireshark çalıştırmak ve görün aslında ağda gerçekte oluyor. Bu tür bir sorunu teşhis etmenin en güvenilir yolu olduğunu buldum - müşteriniz hata yapabilir, kütüphanenin hataları olabilir, sunucuda hatalar olabilir, ancak Wireshark size gerçekten neler olduğunu gösterecektir.

DÜZENLEME: Tamam, HTTPS için biraz daha zorlayıcı. Windows üzerinde çalışıyorsanız, Fiddler'u kullanabilirsiniz, bu bir proxy'dir - istemci kodunuzu sertifikasını kabul etmek için ikna edebilirseniz HTTPS ile baş edebilir, ancak bu biraz daha müdahaleci olur ... bu şekilde açıkça bir proxy koymak Trafiğin neye benzediğini değiştirir.

Bunun yerine sunucunun bir hata ayıklama sürümü ile HTTP üzerinden konuşabilirseniz daha iyi olurdu. Durumunuzda bu uygun mu, yoksa kontrolünüzün tamamen dışında bir sunucu mı?

+0

Tüm trafiğim uzak sunucuya https ... ve wireshark orada çok fazla göremez. Java DOES ile kıvrım ile isabet farklı görünüyor, ama ne aramalıyım? –

+0

İyi fikir. Onlarla iletişime geçtim ve test için bir HTTP sunucusu aldım. Sorunumu, sunucuları tarafından reddedilen Content-Type üstbilgisinin olmamasıydı. Çok teşekkürler. –