В этой статье мы покажем вам несколько примеров выполнения HTTP-запросов GET/POST с помощью следующих API
- HttpClient для Apache 4.5.10
- ОХТТП 4.2.2
- Java 11 HttpClient
- Java 1.1 HttpURLConnection (Не рекомендуется)
1. HttpClient для Apache
В старые времена этот Apache HttpClient был стандартом де-факто для отправки HTTP-запроса GET/POST на Java.
org.apache.httpcomponents httpclient 4.5.10
package com.mkyong.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=mkyong"); // add request headers request.addHeader("custom-key", "mkyong"); 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())); } } }
2. ОХТТП
Этот OkHttp очень популярен на Android и широко используется во многих веб-проектах восходящей звезды.
com.squareup.okhttp3 okhttp 4.2.2
package com.mkyong.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=mkyong") .addHeader("custom-key", "mkyong") // 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()); } } }
3. Java 11 HttpКлиент
В Java 11 новый HttpClient представлен в пакете java.net.http. *
SendAsync()
вернет CompletableFuture
, это делает параллельные запросы намного проще и гибче, больше никаких внешних библиотек для отправки HTTP-запроса!
package com.mkyong.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
4. Соединение HttpURLConnection
Это HttpURLConnection
класс доступен с Java 1.1, использует это, если вы осмелитесь 🙂 Как правило, не рекомендуется использовать этот класс, потому что кодовая база очень старая и устаревшая, она может не поддерживать новый стандарт HTTP/2, на самом деле, очень сложно настроить и использовать этот класс.
Приведенный ниже пример приведен только для справки, НЕ рекомендую использовать этот класс!
package com.mkyong.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=mkyong"; 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()); } } }
Рекомендации
- Официальный сайт Apache HttpClient
- Примеры HttpClient для Apache
- Официальный Сайт Ok Http
- Ok Примеры Http
- Java 11 HttpClient javadoc
- Java 11 HttpClient Примеры
- HttpURLConnection javadoc-соединение
Оригинал: “https://mkyong.com/java/how-to-send-http-request-getpost-in-java/”