2012-03-08 32 views
18

Cách đăng dữ liệu JSON bằng cách sử dụng HttpURLConnection? Tôi đang cố gắng này:cURL và HttpURLConnection - Đăng dữ liệu JSON

HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection())); 
httpcon.setDoOutput(true); 
httpcon.setRequestProperty("Content-Type", "application/json"); 
httpcon.setRequestProperty("Accept", "application/json"); 
httpcon.setRequestMethod("POST"); 
httpcon.connect(); 

StringReader reader = new StringReader("{'value': 7.5}"); 
OutputStream os = httpcon.getOutputStream(); 

char[] buffer = new char[4096]; 
int bytes_read;  
while((bytes_read = reader.read(buffer)) != -1) { 
    os.write(buffer, 0, bytes_read);// I am getting compilation error here 
} 
os.close(); 

Tôi nhận lỗi biên dịch trong dòng 14.

Các cURL yêu cầu là:

curl -H "Accept: application/json" \ 
-H "Content-Type: application/json" \ 
-d "{'value': 7.5}" \ 
"a URL" 

Đây có phải là cách để xử lý yêu cầu cURL? Mọi thông tin sẽ rất hữu ích cho tôi.

Cảm ơn.

+0

Bạn nên đăng lỗi biên dịch – ykaganovich

Trả lời

30

OutputStream hy vọng sẽ hoạt động với byte và bạn đang chuyển các ký tự đó. Hãy thử điều này:

HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection())); 
httpcon.setDoOutput(true); 
httpcon.setRequestProperty("Content-Type", "application/json"); 
httpcon.setRequestProperty("Accept", "application/json"); 
httpcon.setRequestMethod("POST"); 
httpcon.connect(); 

byte[] outputBytes = "{'value': 7.5}".getBytes("UTF-8"); 
OutputStream os = httpcon.getOutputStream(); 
os.write(outputBytes); 

os.close(); 
+0

Không thể gửi đối tượng json phức tạp theo cách này? Ví dụ: "{" điểm ": [{" điểm ": {" vĩ độ ": 40.8195085182092," kinh độ ": - 73.75127574479318}," mô tả ":" test "}, {" point ": {" vĩ độ ": 40.2195085182092," kinh độ ": - 74.75127574479318}," mô tả ":" test2 "}]," chế độ ":" WALKING "}" ... là một đối tượng mà tôi đang gửi qua phương thức này và tôi nhận Mã phản hồi HTTP 500. – crowmagnumb

+0

@CrowMagnumb Bạn nên đăng câu hỏi riêng. 500 có nghĩa là máy chủ có lỗi nội bộ đang cố xử lý yêu cầu của bạn. – ykaganovich

+0

OK, tôi đã làm như vậy [ở đây] (http://stackoverflow.com/questions/20452366/http-response-code-500-sending-complex-json-object-using-httpurlconnection) Cảm ơn bạn đã đề xuất. – crowmagnumb

8

Bạn có thể muốn sử dụng lớp OutputStreamWriter.

final String toWriteOut = "{'value': 7.5}"; 
final OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream()); 
osw.write(toWriteOut); 
osw.close(); 
+0

lợi ích trên 'OutputStream' là gì? – Darpan

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