Comment envoyer une requête HTTP GET / POST en Java
Dans cet article, nous allons vous montrer quelques exemples pour effectuer des requêtes HTTP GET / POST via les API suivantes
-
Apache HttpClient 4.5.10
-
OkHttp 4.2.2
-
Java 11 HttpClient
-
Java 1.1 HttpURLConnection (non recommandé)
1. Apache HttpClient
Dans l'ancien temps, ceApache HttpClient est le standard de facto pour envoyer une requête HTTP GET / POST en Java.
pom.xml
org.apache.httpcomponents httpclient 4.5.10
HttpClientExample.java
package com.example.http; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class HttpClientExample { // one instance, reuse private final CloseableHttpClient httpClient = HttpClients.createDefault(); public static void main(String[] args) throws Exception { HttpClientExample obj = new HttpClientExample(); try { System.out.println("Testing 1 - Send Http GET request"); obj.sendGet(); System.out.println("Testing 2 - Send Http POST request"); obj.sendPost(); } finally { obj.close(); } } private void close() throws IOException { httpClient.close(); } private void sendGet() throws Exception { HttpGet request = new HttpGet("https://www.google.com/search?q=example"); // add request headers request.addHeader("custom-key", "example"); request.addHeader(HttpHeaders.USER_AGENT, "Googlebot"); try (CloseableHttpResponse response = httpClient.execute(request)) { // Get HttpResponse Status System.out.println(response.getStatusLine().toString()); HttpEntity entity = response.getEntity(); Header headers = entity.getContentType(); System.out.println(headers); if (entity != null) { // return it as a String String result = EntityUtils.toString(entity); System.out.println(result); } } } private void sendPost() throws Exception { HttpPost post = new HttpPost("https://httpbin.org/post"); // add request parameter, form parameters ListurlParameters = new ArrayList<>(); urlParameters.add(new BasicNameValuePair("username", "abc")); urlParameters.add(new BasicNameValuePair("password", "123")); urlParameters.add(new BasicNameValuePair("custom", "secret")); post.setEntity(new UrlEncodedFormEntity(urlParameters)); try (CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = httpClient.execute(post)) { System.out.println(EntityUtils.toString(response.getEntity())); } } }
Note
En savoir plusApache HttpClient
examples
2. OkHttp
CeOkHttp est très populaire sur Android, et largement utilisé dans de nombreux projets web, l'étoile montante.
pom.xml
com.squareup.okhttp3 okhttp 4.2.2
OkHttpExample.java
package com.example.http; import okhttp3.*; import java.io.IOException; public class OkHttpExample { // one instance, reuse private final OkHttpClient httpClient = new OkHttpClient(); public static void main(String[] args) throws Exception { OkHttpExample obj = new OkHttpExample(); System.out.println("Testing 1 - Send Http GET request"); obj.sendGet(); System.out.println("Testing 2 - Send Http POST request"); obj.sendPost(); } private void sendGet() throws Exception { Request request = new Request.Builder() .url("https://www.google.com/search?q=example") .addHeader("custom-key", "example") // add request headers .addHeader("User-Agent", "OkHttp Bot") .build(); try (Response response = httpClient.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); // Get response body System.out.println(response.body().string()); } } private void sendPost() throws Exception { // form parameters RequestBody formBody = new FormBody.Builder() .add("username", "abc") .add("password", "123") .add("custom", "secret") .build(); Request request = new Request.Builder() .url("https://httpbin.org/post") .addHeader("User-Agent", "OkHttp Bot") .post(formBody) .build(); try (Response response = httpClient.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); // Get response body System.out.println(response.body().string()); } } }
Note
En savoir plusOkHttp examples
3. Java 11 HttpClient
Dans Java 11, un nouveauHttpClient est introduit dans le packagejava.net.http.*
LesendAsync()
renverra unCompletableFuture
, cela rend les requêtes simultanées beaucoup plus faciles et flexibles, plus de bibliothèques externes pour envoyer une requête HTTP!
Java11HttpClientExample.java
package com.example.http; import java.net.URI; import java.net.URLEncoder; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; public class Java11HttpClientExample { // one instance, reuse private final HttpClient httpClient = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_2) .build(); public static void main(String[] args) throws Exception { Java11HttpClientExample obj = new Java11HttpClientExample(); System.out.println("Testing 1 - Send Http GET request"); obj.sendGet(); System.out.println("Testing 2 - Send Http POST request"); obj.sendPost(); } private void sendGet() throws Exception { HttpRequest request = HttpRequest.newBuilder() .GET() .uri(URI.create("https://httpbin.org/get")) .setHeader("User-Agent", "Java 11 HttpClient Bot") .build(); HttpResponseresponse = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); // print status code System.out.println(response.statusCode()); // print response body System.out.println(response.body()); } private void sendPost() throws Exception { // form parameters Map
Note
En savoir plusJava 11 HttpClient
examples
4. HttpURLConnection
Cette classeHttpURLConnection
est disponible depuis Java 1.1, l'utilise si vous l'osez :) Généralement, il n'est PAS recommandé d'utiliser cette classe, car la base de code est très ancienne et obsolète, elle peut ne pas prendre en charge le nouveau standard HTTP / 2, en fait, il est vraiment difficile de configurer et d'utiliser cette classe.
L'exemple ci-dessous est juste pour référence personnelle, ne recommande PAS d'utiliser cette classe!
HttpURLConnectionExample.java
package com.example.http; import javax.net.ssl.HttpsURLConnection; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpURLConnectionExample { public static void main(String[] args) throws Exception { HttpURLConnectionExample obj = new HttpURLConnectionExample(); System.out.println("Testing 1 - Send Http GET request"); obj.sendGet(); System.out.println("Testing 2 - Send Http POST request"); obj.sendPost(); } private void sendGet() throws Exception { String url = "https://www.google.com/search?q=example"; HttpURLConnection httpClient = (HttpURLConnection) new URL(url).openConnection(); // optional default is GET httpClient.setRequestMethod("GET"); //add request header httpClient.setRequestProperty("User-Agent", "Mozilla/5.0"); int responseCode = httpClient.getResponseCode(); System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Response Code : " + responseCode); try (BufferedReader in = new BufferedReader( new InputStreamReader(httpClient.getInputStream()))) { StringBuilder response = new StringBuilder(); String line; while ((line = in.readLine()) != null) { response.append(line); } //print result System.out.println(response.toString()); } } private void sendPost() throws Exception { // url is missing? //String url = "https://selfsolve.apple.com/wcResults.do"; String url = "https://httpbin.org/post"; HttpsURLConnection httpClient = (HttpsURLConnection) new URL(url).openConnection(); //add reuqest header httpClient.setRequestMethod("POST"); httpClient.setRequestProperty("User-Agent", "Mozilla/5.0"); httpClient.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); String urlParameters = "sn=C02G8416DRJM&cn=&locale=&caller=&num=12345"; // Send post request httpClient.setDoOutput(true); try (DataOutputStream wr = new DataOutputStream(httpClient.getOutputStream())) { wr.writeBytes(urlParameters); wr.flush(); } int responseCode = httpClient.getResponseCode(); System.out.println("\nSending 'POST' request to URL : " + url); System.out.println("Post parameters : " + urlParameters); System.out.println("Response Code : " + responseCode); try (BufferedReader in = new BufferedReader( new InputStreamReader(httpClient.getInputStream()))) { String line; StringBuilder response = new StringBuilder(); while ((line = in.readLine()) != null) { response.append(line); } //print result System.out.println(response.toString()); } } }