2010-10-21 20 views
3

J'essaie d'utiliser un HttpURLConnection dans mon application. J'ai mis ma méthode de demande à 'GET', mais quand j'essaye de récupérer le flux de sortie alors la méthode est changée en 'POST'! Je ne suis pas sûr que ce soit la raison, mais mon serveur JSON (j'utilise JAX-RS) renvoie une page vierge lorsque j'envoie une requête en utilisant un 'POST'.Android ne peut pas envoyer de requête GET avec HttpURLConnection

Voici un extrait de mon code:

// Create the connection 
HttpURLConnection con = (HttpURLConnection) new URL(getUrl() + uriP).openConnection(); 
// Add cookies if necessary 
if (cookies != null) { 
    for (String cookie : cookies) { 
    con.addRequestProperty("Cookie", cookie); 
    Log.d("JSONServer", "Added cookie: " + cookie); 
    } 
} 
con.setDoOutput(true); 
con.setDoInput(true); 
con.setUseCaches(false); 
con.setRequestMethod("GET"); 
con.setConnectTimeout(20000); 
// Add 'Accept' property in header otherwise JAX-RS/CXF will answer a XML stream 
con.addRequestProperty("Accept", "application/json"); 

// Get the output stream 
OutputStream os = con.getOutputStream(); 

// !!!!! HERE THE REQUEST METHOD HAS BEEN CHANGED !!!!!! 
OutputStreamWriter wr = new OutputStreamWriter(os); 
wr.write(requestP); 
// Send the request 
wr.flush(); 

Merci pour vous répondre. Eric

Répondre

8

Mais requêtes GET sont supposés ne pas avoir contenu ... en écrivant au flux de sortie des connexions vous changez la nature de la demande à un poste. La bibliothèque est très utile pour repérer que vous faites ceci ... the doc for getOutputStream indique explicitement "La méthode de demande par défaut change en" POST "quand cette méthode est appelée."

Si vous avez besoin d'envoyer des données au serveur dans le GET, il doit normalement être encodé dans les paramètres d'URL.

+0

Grand, ça marche! Merci beaucoup pour votre réponse rapide. J'ai fait une erreur: j'ai réutilisé un ancien code qui demande un serveur avec l'extrait ci-dessus. Ce serveur ne dérange pas si la demande utilise une méthode POST ou GET! – Eric

4

Enlever con.setDoOutput(true); de votre code. Ensuite, la demande de service Web fonctionne très bien avec GET méthode

HttpURLConnection utilise la méthode GET par défaut. Il utilisera POST si setDoOutput(true) a été appelé.

Le commentaire ci-dessus se trouvent dans l'URL ci-dessous

Android HTTPURLConnection Class