Réponse mise à jour:
Étant donné que certaines classes, dans la réponse d'origine, sont obsolètes dans la nouvelle version des composants HTTP Apache, je publie cette mise à jour.
À propos, vous pouvez accéder à la documentation complète pour plus d'exemples ici .
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. son 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 cette URL: http://hc.apache.org/
PostMethod
il semble que ce soit désormais appeléHttpPost
selon stackoverflow.com/a/9242394/1338936 - juste pour quiconque trouve cette réponse comme je l'ai fait :)L'envoi d'une requête POST est facile en Java vanille. En commençant par un
URL
, nous avons besoin de t convertir en unURLConnection
utilisanturl.openConnection();
. Après cela, nous devons le convertir en unHttpURLConnection
, afin que nous puissions accéder à sasetRequestMethod()
méthode pour définir notre méthode. Nous disons enfin que nous allons envoyer des données via la connexion.Nous devons ensuite indiquer ce que nous allons envoyer:
Envoi d'un formulaire simple
Un POST normal provenant d'un formulaire http a un format bien défini . Nous devons convertir notre entrée dans ce format:
Nous pouvons ensuite joindre le contenu de notre formulaire à la demande http avec les en-têtes appropriés et l'envoyer.
Envoi de JSON
Nous pouvons également envoyer json en utilisant java, c'est aussi simple:
N'oubliez pas que différents serveurs acceptent différents types de contenu pour json, voir cette question.
Envoi de fichiers avec Java Post
L'envoi de fichiers peut être considéré comme plus difficile à gérer car le format est plus complexe. Nous allons également ajouter la prise en charge de l'envoi des fichiers sous forme de chaîne, car nous ne voulons pas mettre le fichier entièrement en mémoire tampon.
Pour cela, nous définissons quelques méthodes d'assistance:
Nous pouvons ensuite utiliser ces méthodes pour créer une demande de publication en plusieurs parties comme suit:
la source
out.write(finishBoundaryBytes);
ligne besoin?http.connect();
va effectuer l'envoi POST, n'est-ce pas?requests.post('http://httpbin.org/post', data = {'key':'value'})
en Python… Je suis nouveau sur Java, donc c'est une utilisation très étrange du mot «facile» pour moi :)la source
encode(String)
est obsolète. Vous devez utiliserencode(String, String)
, qui spécifie le type d'encodage. Exemple:encode(rawData, "UTF-8")
.La première réponse a été 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
HttpResponse
avec les bibliothèques Java.Voici le code le plus complet:
la source
e.printStackTrace()
ne gère rien.Un moyen simple d'utiliser les composants HTTP Apache est
Jetez un œil à l' API Fluent
la source
moyen le plus simple d'envoyer des paramètres avec la demande de publication:
Vous avez fait. vous pouvez maintenant utiliser
responsePOST
. Obtenez le contenu de la réponse sous forme de chaîne:la source
Appelez
HttpURLConnection.setRequestMethod("POST")
et enHttpURLConnection.setDoOutput(true);
fait, seul ce dernier est nécessaire car POST devient alors la méthode par défaut.la source
Je recommande d'utiliser http-request basé sur apache http api.
la source