В этой статье мы покажем вам несколько примеров выполнения 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
List urlParameters = 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();
HttpResponse response = 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/”