web-dev-qa-db-fra.com

Android HTTPUrlConnection: comment définir les données de publication dans un corps http?

J'ai déjà créé mon 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);

Je ne sais pas comment définir postData dans le corps http. Comment le faire Est-ce que je ferais mieux d'utiliser HttpPost à la place?

Merci de votre aide.

51
Rob

Si vous voulez envoyer String, essayez seulement de cette façon:

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

Mais si vous voulez envoyer en Json, changez le type de contenu en:

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

et maintenant notre str nous pouvons écrire:

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

J'espère que ça va aider,

78
Maxim Shoustin

lien de Guruparan dans le commentaire ci-dessus donne une réponse vraiment agréable à cette question. Je recommande fortement de regarder. Voici le principe qui fait que sa solution fonctionne:

D'après ce que j'ai compris, HttpURLConnection représente le corps de la réponse sous la forme d'un OutputStream. Vous devez donc appeler quelque chose comme:

obtenir le flux de sortie de la connexion

OutputStream op = conn.getOuputStream();

écrire le corps de la réponse

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

fermer le flux de sortie

op.close();

et continuez ensuite votre chemin joyeux avec la connexion (que vous devrez toujours fermer).

3
PopulusTremuloides