In diesem Beitrag wird erläutert, wie eine HTTP-POST-Anforderung in Java gesendet wird.
1. Verwenden java.net.URLConnection
Das URLConnection -Klasse bietet mehrere Methoden, um mit der URL über das Netzwerk zu kommunizieren. Wir können diese Klasse zum direkten Lesen und Schreiben in die Ressource verwenden, auf die von der URL verwiesen wird.
Das folgende Programm ruft eine ab URLConnection
Objekt durch Aufrufen der openConnection()
Methode auf einem URL
und erhält einen Eingabestrom durch Aufrufen getInputStream()
. Dann erstellt das Programm eine BufferedReader
auf den Eingabestrom und liest daraus.
Um eine HTTP-POST-Anforderung zu senden, vergessen Sie nicht, dies festzulegen URLConnection.setDoOutput()
Methode zu true
und schreiben Sie auch die POST-Parameter in den Ausgabestrom der Verbindung.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; class Main { public static void main(String[] args) throws Exception { URL url = new URL("https://postman-echo.com/post"); String postData = "foo1=bar1&foo2=bar2"; URLConnection conn = url.openConnection(); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", Integer.toString(postData.length())); try (DataOutputStream dos = new DataOutputStream(conn.getOutputStream())) { dos.writeBytes(postData); } try (BufferedReader bf = new BufferedReader(new InputStreamReader( conn.getInputStream()))) { String line; while ((line = bf.readLine()) != null) { System.out.println(line); } } } } |
2. Verwenden java.net.HttpUrlConnection
Da wir mit HTTP arbeiten, ist es vorzuziehen, es zu verwenden HttpURLConnection über Oberklasse URLConnection
, das HTTP-spezifische Funktionen unterstützt. Um ein zu bekommen HttpURLConnection
Objekt, einfach gegossen URLConnection
Beispiel zu a HttpURLConnection
.
Um dann eine HTTP-POST-Anforderung zu senden, pass POST
Zeichenfolgenliteral für die setRequestMethod()
Methode von HttpURLConnection
Objekt. Dies ist zweifellos eine bessere Alternative, als sich darauf zu verlassen setDoOutput()
Methode von URLConnection
Klasse.
Dies wird im Folgenden demonstriert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; class Main { public static void main(String[] args) { try { URL url = new URL("https://postman-echo.com/post"); String postData = "foo1=bar1&foo2=bar2"; HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", Integer.toString(postData.length())); conn.setUseCaches(false); try (DataOutputStream dos = new DataOutputStream(conn.getOutputStream())) { dos.writeBytes(postData); } try (BufferedReader br = new BufferedReader(new InputStreamReader( conn.getInputStream()))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } catch (Exception e) { e.printStackTrace(); } } } |
3. Verwendung von Apache HttpClient
API
Wenn Ihr Projekt für externe Bibliotheken offen ist, ziehen Sie die Verwendung von in Betracht Apache HttpClient
API zum Ausführen von HTTP-Methoden. HttpClient
verarbeitet intern einen oder mehrere HTTP-Anforderungs-/HTTP-Antwortaustausche, die für die erfolgreiche Ausführung einer HTTP-Methode erforderlich sind. Vom Benutzer wird erwartet, dass er ein auszuführendes Anforderungsobjekt bereitstellt, und HttpClient
soll die Anforderung an den Zielserver übertragen, ein entsprechendes Antwortobjekt zurückgeben oder eine Ausnahme auslösen, wenn die Ausführung nicht erfolgreich war.
Hier ist ein einfaches Beispiel, das zeigt, wie wir verwenden können HttpClient
APIs zum Senden von HTTP-POST-Anforderungen. Bitte beziehen Sie sich auf offiziell HttpClient-Beispiele um ein tiefgreifendes Verständnis aller von diesem Modul angebotenen Funktionen zu erhalten.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.net.URI; class Main { public static void main(String[] args) throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); try { HttpUriRequest httppost = RequestBuilder.post() .setUri(new URI("https://postman-echo.com/post")) .addParameter("foo1", "bar1") .addParameter("foo2", "bar2") .build(); CloseableHttpResponse response = httpclient.execute(httppost); try { System.out.println(EntityUtils.toString(response.getEntity())); } finally { response.close(); } } finally { httpclient.close(); } } } |
Es ist erwähnenswert, dass, wie Apache HttpClient
, sind mehrere andere Java-Bibliotheken verfügbar, die einfachere HTTP-Anforderungen von Java-Code ermöglichen. Die Abdeckung anderer Bibliotheken von Drittanbietern würde den Rahmen dieses Artikels sprengen.
Das ist alles über das Erstellen einer HTTP-POST-Anfrage in Java.