2010-01-20 37 views
7

Làm thế nào để bạn thực hiện một HTTP PUT? Lớp tôi đang sử dụng dường như nghĩ rằng nó đang làm một PUT nhưng điểm cuối đang xử lý nó như thể tôi đã làm một GET. Tôi có làm gì sai không?Java: HTTP PUT với 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); 

Đó là in ấn:

PUT 
<same content as doing a GET> 

Tôi không muốn bao gồm một thư viện nếu điều này có thể làm việc ...

Trả lời

5

Có một cách dễ dàng để tìm hiểu: chạy Wireshark và xem thực sự là gì xảy ra trên mạng. Tôi đã thấy rằng đó là cách đáng tin cậy nhất để chẩn đoán loại vấn đề này - máy khách của bạn có thể có lỗi, thư viện có thể có lỗi, máy chủ có thể có lỗi, nhưng Wireshark sẽ cho bạn biết điều gì đang thực sự xảy ra.

EDIT: OK, đối với HTTPS, điều này hơi phức tạp hơn một chút. Bạn có thể sử dụng Fiddler nếu bạn đang chạy trên Windows, đó là proxy - nó có thể đối phó với HTTPS nếu bạn có thể thuyết phục mã máy khách chấp nhận chứng chỉ của nó, nhưng điều đó hơi xâm phạm hơn ... đặt proxy theo cách rõ ràng thay đổi lưu lượng truy cập trông như thế nào.

Sẽ tốt hơn nếu bạn có thể nói chuyện với phiên bản gỡ lỗi của máy chủ qua HTTP thay thế. Điều đó có khả thi trong trường hợp của bạn hay là máy chủ hoàn toàn nằm ngoài tầm kiểm soát của bạn?

+0

Tất cả lưu lượng truy cập của tôi là https tới máy chủ từ xa ... và Wireshark không thể thấy nhiều bên trong đó. Đánh nó với curl so với java DOES trông khác, nhưng tôi nên tìm gì? –

+0

Ý tưởng hay. Tôi đã liên lạc với họ và có một máy chủ HTTP để thử nghiệm. Tôi thấy vấn đề của tôi là thiếu tiêu đề Loại Nội dung bị máy chủ của họ từ chối. Cám ơn rất nhiều. –

Các vấn đề liên quan