2012-03-08 16 views
18

Jak publikować dane JSON za pomocą HttpURLConnection? Próbuję to:cURL i HttpURLConnection - Post JSON Data

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

otrzymuję błąd kompilacji w linii 14.

Żądanie cURL jest:

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

Czy w ten sposób obsługiwać żądania cURL? Wszelkie informacje będą dla mnie bardzo pomocne.

Dzięki.

+0

Powinieneś opublikować błąd kompilacji – ykaganovich

Odpowiedz

30

OutputStream oczekuje pracy z bajtami i przekazujesz je. Spróbuj tego:

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

Czy nie jest możliwe wysłanie złożonego obiektu Json w ten sposób? Na przykład ... "{" points ": [{" point ": {" szerokość geograficzna ": 40.8195085182092," długość geograficzna ": - 73,75127574479318}," description ":" test "}, {" punkt ": {" szerokość geograficzna ": 40.2195085182092," długość geograficzna ": - 74,75127574479318}," description ":" test2 "}]," mode ":" WALKING "}" ... to obiekt, który wysyłam za pośrednictwem tej metody, a ja uzyskać kod odpowiedzi HTTP 500. – crowmagnumb

+0

@ CrowMagnumb Powinieneś zamieścić osobne pytanie. 500 oznacza, że ​​serwer ma błąd wewnętrzny, który próbuje przetworzyć żądanie. – ykaganovich

+0

OK, zrobiłem tak [tutaj] (http://stackoverflow.com/questions/20452366/http-response-code-500-sending-complex-json-object-using-httpurlconnection) Dzięki za sugestię. – crowmagnumb

8

Możesz użyć klasy OutputStreamWriter.

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

jaka byłaby korzyść z 'OutputStream'? – Darpan

Powiązane problemy