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 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
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(); 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
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()); } } }