HttpClient: HTTP-Anfragen in Java Anwendungen leicht gemacht und erklärt
Entdecken Sie, wie Apache HttpClient Ihre Java-Anwendungen mit müheloser HTTP-Kommunikation verbessert. Unser Blogbeitrag führt Sie Schritt für Schritt durch die Verwendung von GET- und POST-Anfragen, ergänzt durch praxisorientierte Beispiele. Lernen Sie nicht nur, wie Sie schnell und effizient HTTP-Anfragen direkt aus Ihrem Java-Code senden können, sondern auch, wie Sie dabei häufige Fehler vermeiden und die Leistung Ihrer Anwendung optimieren.
Apache HttpClient
Apache HttpClient wird sehr häufig verwendet, um HTTP-Anfragen direkt aus einem Java-Programm zu senden. Die Verwendung von Maven macht die Einbindung von Apache HttpClient in Ihr Projekt zum Kinderspiel. Fügen Sie einfach die folgenden Abhängigkeiten hinzu:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4</version>
</dependency>
Wenn Sie kein Maven verwenden, fügen Sie die folgenden JAR-Dateien zum Projektpfad hinzu:
- httpclient-4.4.jar
- httpcore-4.4.jar
- commons-logging-1.2.jar
- commons-codec-1.9.jar
Verwendung von Apache HttpClient
Folgende Schritte sind notwendig, um Apache HttpClient für GET- und POST-Anfragen zu verwenden:
- Erstellen Sie eine Instanz von
CloseableHttpClient
mit Hilfe der HilfsklasseHttpClients
. - Erstellen Sie eine Instanz von
HttpGet
oderHttpPost
basierend auf dem Typ der HTTP-Anfrage. - Fügen Sie erforderliche Header wie User-Agent, Accept-Encoding usw. hinzu.
- Für POST-Anfragen: Erstellen Sie eine Liste von
NameValuePair
und fügen Sie alle Formparameter hinzu. Setzen Sie diese dann in dieHttpPost
-Entität. - Erhalten Sie
CloseableHttpResponse
, indem Sie dieHttpGet
– oderHttpPost
-Anfrage ausführen. - Holen Sie sich die erforderlichen Details wie Statuscode, Fehlerinformationen, Antwort-HTML usw. von der Antwort.
- Schließen Sie schließlich die Apache HttpClient-Ressource.
Beispielprogramm
Hier ist das endgültige Programm, das zeigt, wie Sie Apache HttpClient verwenden, um HTTP-GET- und POST-Anfragen in einem Java-Programm selbst auszuführen:
package com.journaldev.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
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;
public class ApacheHttpClientExample {
private static final String USER_AGENT = "Mozilla/5.0";
private static final String GET_URL = "https://localhost:9090/SpringMVCExample";
private static final String POST_URL = "https://localhost:9090/SpringMVCExample/home";
public static void main(String[] args) throws IOException {
sendGET();
System.out.println("GET DONE");
sendPOST();
System.out.println("POST DONE");
}
private static void sendGET() throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(GET_URL);
httpGet.addHeader("User-Agent", USER_AGENT);
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println("GET Response Status:: "
+ httpResponse.getStatusLine().getStatusCode());
BufferedReader reader = new BufferedReader(new InputStreamReader(
httpResponse.getEntity().getContent()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = reader.readLine()) != null) {
response.append(inputLine);
}
reader.close();
// print result
System.out.println(response.toString());
httpClient.close();
}
private static void sendPOST() throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(POST_URL);
httpPost.addHeader("User-Agent", USER_AGENT);
List urlParameters = new ArrayList();
urlParameters.add(new BasicNameValuePair("userName", "Pankaj Kumar"));
HttpEntity postParams = new UrlEncodedFormEntity(urlParameters);
httpPost.setEntity(postParams);
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
System.out.println("POST Response Status:: "
+ httpResponse.getStatusLine().getStatusCode());
BufferedReader reader = new BufferedReader(new InputStreamReader(
httpResponse.getEntity().getContent()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = reader.readLine()) != null) {
response.append(inputLine);
}
reader.close();
// print result
System.out.println(response.toString());
httpClient.close();
}
}
Ergebnis
Wenn das Programm ausgeführt wird, erhalten Sie ähnliches HTML wie im Browser:
GET Response Status:: 200
<html><head><title>Home</title></head><body><h1>Hello world!</h1><P>The time on the server is March 7, 2015 1:01:22 AM IST.</P></body></html>
GET DONE
POST Response Status:: 200
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>User Home Page</title></head><body><h3>Hi Pankaj Kumar</h3></body></html>
POST DONE
Fazit
Das war unser Leitfaden zum Beispiel mit Apache HttpClient. Es enthält viele nützliche Methoden, die Sie verwenden können. Ich empfehle Ihnen daher, sie für ein besseres Verständnis auszuprobieren.