282 votes

Envoi d'une requête HTTP POST en Java

Supposons que cette URL...

http://www.example.com/page.php?id=10            

(L'identifiant doit être envoyé dans une requête POST)

Je veux envoyer le id = 10 à la page d'accueil du serveur page.php qui l'accepte dans une méthode POST.

Comment puis-je faire cela à partir de Java ?

J'ai essayé ceci :

URL aaa = new URL("http://www.example.com/page.php");
URLConnection ccc = aaa.openConnection();

Mais je n'arrive toujours pas à comprendre comment l'envoyer via POST

325voto

mhshams Points 3839

Réponse actualisée :

Étant donné que certaines des classes mentionnées dans la réponse originale sont obsolètes dans la version la plus récente d'Apache HTTP Components, je publie cette mise à jour.

D'ailleurs, vous pouvez accéder à la documentation complète pour plus d'exemples. aquí .

HttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost("http://www.a-domain.com/foo/");

// Request parameters and other properties.
List<NameValuePair> params = new ArrayList<NameValuePair>(2);
params.add(new BasicNameValuePair("param-1", "12345"));
params.add(new BasicNameValuePair("param-2", "Hello!"));
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

//Execute and get the response.
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();

if (entity != null) {
    try (InputStream instream = entity.getContent()) {
        // do something useful
    }
}

Réponse originale :

Je recommande d'utiliser Apache HttpClient, qui est plus rapide et plus facile à mettre en œuvre.

HttpPost post = new HttpPost("http://jakarata.apache.org/");
NameValuePair[] data = {
    new NameValuePair("user", "joe"),
    new NameValuePair("password", "bloggs")
};
post.setRequestBody(data);
// execute method and handle any error responses.
...
InputStream in = post.getResponseBodyAsStream();
// handle response.

pour plus d'informations, consultez ce site : http://hc.apache.org/

98voto

DuduAlul Points 2354
String rawData = "id=10";
String type = "application/x-www-form-urlencoded";
String encodedData = URLEncoder.encode( rawData, "UTF-8" ); 
URL u = new URL("http://www.example.com/page.php");
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length", String.valueOf(encodedData.length()));
OutputStream os = conn.getOutputStream();
os.write(encodedData.getBytes());

22voto

Cnu Mar Points 317

La première réponse était excellente, mais j'ai dû ajouter try/catch pour éviter les erreurs du compilateur Java.
De plus, j'ai eu du mal à comprendre comment lire les HttpResponse avec des bibliothèques Java.

Voici le code plus complet :

/*
 * Create the POST request
 */
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://example.com/");
// Request parameters and other properties.
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user", "Bob"));
try {
    httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
} catch (UnsupportedEncodingException e) {
    // writing error to Log
    e.printStackTrace();
}
/*
 * Execute the HTTP Request
 */
try {
    HttpResponse response = httpClient.execute(httpPost);
    HttpEntity respEntity = response.getEntity();

    if (respEntity != null) {
        // EntityUtils to get the response content
        String content =  EntityUtils.toString(respEntity);
    }
} catch (ClientProtocolException e) {
    // writing exception to log
    e.printStackTrace();
} catch (IOException e) {
    // writing exception to log
    e.printStackTrace();
}

17voto

Mathias Bak Points 1473

Une façon simple d'utiliser les composants Apache HTTP est la suivante

Request.Post("http://www.example.com/page.php")
            .bodyForm(Form.form().add("id", "10").build())
            .execute()
            .returnContent();

Jetez un coup d'œil à la API fluide

1voto

EJP Points 113412

Appeler HttpURLConnection.setRequestMethod("POST") y HttpURLConnection.setDoOutput(true); En fait, seule la dernière est nécessaire, car POST devient alors la méthode par défaut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X