So senden Sie eine HTTP-Anfrage GET / POST in Java

In diesem Artikel zeigen wir Ihnen einige Beispiele für HTTP-GET / POST-Anforderungen über die folgenden APIs
-
Apache HttpClient 4.5.10
-
OkHttp 4.2.2
-
Java 11 HttpClient
-
Java 1.1 HttpURLConnection (Nicht empfohlen)
1. Apache HttpClient
Früher war diesesApache HttpClient der De-facto-Standard zum Senden einer HTTP-GET / POST-Anforderung in 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
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()));
}
}
}
Note
Lesen Sie mehrApache HttpClient
examples
2. OkHttp
DiesesOkHttp ist unter Android sehr beliebt und wird in vielen Webprojekten häufig als aufstrebender Stern verwendet.
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
Lesen Sie mehrOkHttp examples
3. Java 11 HttpClient
In Java 11 wird ein neuesHttpClient in Paketjava.net.http.* eingeführt
DiesendAsync() gebenCompletableFuture zurück, es macht gleichzeitige Anfragen viel einfacher und flexibler, keine externen Bibliotheken mehr zum Senden einer HTTP-Anfrage!
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();
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
Note
Lesen Sie mehrJava 11 HttpClient
examples
4. HttpURLConnection
DieseHttpURLConnection-Klasse ist seit Java 1.1 verfügbar und wird verwendet, wenn Sie sich trauen :) Im Allgemeinen wird die Verwendung dieser Klasse NICHT empfohlen, da die Codebasis sehr alt und veraltet ist und möglicherweise den neuen HTTP / 2-Standard nicht unterstützt. Tatsächlich ist es sehr schwierig, diese Klasse zu konfigurieren und zu verwenden.
Das folgende Beispiel dient nur zur Selbstreferenz. Es wird NICHT empfohlen, diese Klasse zu verwenden!
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());
}
}
}