Android HTTPUrlConnection: как установить данные сообщения в теле http?

Я уже создал свой HTTPUrlConnection:

String postData = "x=val1&y=val2";
URL url = new URL(strURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Set-Cookie", sessionCookie);
conn.setRequestProperty("Content-Length", "" + Integer.toString(postData.getBytes().length));

// How to add postData as http body?

conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);

Я не знаю, как установить postData в теле http. Как это сделать? Не лучше ли мне использовать HttpPost вместо этого?

Спасибо за вашу помощь.


person Rob    schedule 16.11.2013    source источник
comment
Вы хотите отправить данные Json?   -  person Maxim Shoustin    schedule 16.11.2013
comment
@MaximShoustin Могу ли я просто отправить его как строку? Я обычно делаю это в iOS: NSString *string = @"x=val1&y=val2"; NSData *postData = [string dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:NO]; [request setHTTPBody:postData];   -  person Rob    schedule 16.11.2013
comment
@Rob, привет, я хотел бы поговорить с тобой о добавлении параметров в запрос POST в Android.   -  person Pankaj Nimgade    schedule 14.04.2015


Ответы (2)


Если вы хотите отправить строку, попробуйте только так:

String str =  "some string goes here";
byte[] outputInBytes = str.getBytes("UTF-8");
OutputStream os = conn.getOutputStream();
os.write( outputInBytes );    
os.close();

Но если вы хотите отправить как Json, измените тип контента на:

conn.setRequestProperty("Content-Type","application/json");  

и теперь наш str мы можем написать:

String str =  "{\"x\": \"val1\",\"y\":\"val2\"}";

Надеюсь, это поможет,

person Maxim Shoustin    schedule 16.11.2013
comment
В JSON нельзя использовать простые кавычки в именах ключей. :п - person Julien Palard; 07.04.2015
comment
@JulienPalard tnx, исправлено - person Maxim Shoustin; 07.04.2015
comment
Полный пример здесь :) guruparang.blogspot.com /2016/01/ - person Guruparan Giritharan; 09.01.2016
comment
Спасибо, это Нью-Йорк - person Sukhbir; 31.05.2016

ссылка Guruparan в комментарии выше дает действительно хороший ответ на этот вопрос. Очень рекомендую посмотреть. Вот принцип, благодаря которому его решение работает:

Насколько я понимаю, HttpURLConnection представляет тело ответа как OutputStream. Итак, вам нужно вызвать что-то вроде:

получить выходной поток соединения

OutputStream op = conn.getOuputStream();

написать тело ответа

op.write( [/*your string in bit form*/] );

закрыть выходной поток

op.close();

а затем продолжайте свой веселый путь с соединением (которое вам все равно нужно будет закрыть).

person PopulusTremuloides    schedule 28.03.2018