Wie man Java HttpURLConnection für HTTP GET- und POST-Anfragen verwendet

Einführung

Die Klasse HttpURLConnection aus dem Paket java.net kann verwendet werden, um programmgesteuert eine Java HTTP-Anfrage zu senden. In diesem Artikel erfahren Sie, wie Sie HttpURLConnection in einem Java-Programm verwenden, um GET– und POST-Anfragen zu senden und dann die Antwort auszudrucken.

Voraussetzungen

Für dieses Beispiel mit HttpURLConnection sollten Sie das Spring MVC Tutorial abgeschlossen haben, da es URLs für die GET– und POST-HTTP-Methoden enthält.

Erwägen Sie die Bereitstellung auf einem localhost Tomcat-Server.

Zusammenfassung des SpringMVC-Beispiels

Java HTTP GET-Anfrage

  • localhost:8080/SpringMVCExample/

Java HTTP GET-Anfrage für die Anmeldeseite

  • localhost:8080/SpringMVCExample/login

Java HTTP POST-Anfrage

  • localhost:8080/SpringMVCExample?userName=Pankaj
  • localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123 – für mehrere Parameter

Parameter aus dem Formular ableiten

Der HTML-Code der Anmeldeseite enthält das folgende Formular:

<!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>Login Page</title>
</head>
<body>
<form action="home" method="post">
<input type="text" name="userName"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
  • Die Methode ist POST.
  • Die Aktion ist home.
    • localhost:8080/SpringMVCExample/home
  • Benutzername ist vom Typ Text.

Sie können eine POST-Anfrage erstellen an:

localhost:8080/SpringMVCExample/home?userName=Pankaj

Dies dient als Grundlage für das Beispiel mit HttpURLConnection.

Beispiel mit HttpURLConnection

Hier sind die Schritte zum Senden von Java HTTP-Anfragen mit der Klasse HttpURLConnection:

  1. Erstellen Sie ein URL-Objekt aus der GET– oder POST-URL-Zeichenfolge.
  2. Rufen Sie die Methode openConnection() auf dem URL-Objekt auf, die eine Instanz von HttpURLConnection zurückgibt.
  3. Setzen Sie die Anfrage-Methode in der Instanz von HttpURLConnection (Standardwert ist GET).
  4. Rufen Sie die Methode setRequestProperty() auf der Instanz von HttpURLConnection auf, um Werte für die Anfrage-Header festzulegen (wie "User-Agent", "Accept-Language" usw.).
  5. Wir können getResponseCode() aufrufen, um den HTTP-Code der Antwort zu erhalten. Auf diese Weise erfahren wir, ob die Anfrage erfolgreich verarbeitet wurde oder ob eine HTTP-Fehlermeldung aufgetreten ist.
  6. Für GET verwenden Sie Reader und InputStream, um die Antwort zu lesen und entsprechend zu verarbeiten.
  7. Für POST muss der Code vor der Verarbeitung der Antwort den OutputStream von der Instanz von HttpURLConnection erhalten und POST-Parameter darin schreiben.

Hier ist ein Beispielprogramm, das HttpURLConnection verwendet, um Java GET und POST-Anfragen zu senden:

HttpURLConnectionExample.java
package com.journaldev.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpURLConnectionExample {

	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";

	private static final String POST_PARAMS = "userName=Pankaj";

	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 {
		URL obj = new URL(GET_URL);
		HttpURLConnection con = (HttpURLConnection) obj.openConnection();
		con.setRequestMethod("GET");
		con.setRequestProperty("User-Agent", USER_AGENT);
		int responseCode = con.getResponseCode();
		System.out.println("GET Response Code :: " + responseCode);
		if (responseCode == HttpURLConnection.HTTP_OK) { // Erfolg
			BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
			String inputLine;
			StringBuffer response = new StringBuffer();

			while ((inputLine = in.readLine()) != null) {
				response.append(inputLine);
			}
			in.close();

			// Ergebnis ausgeben
			System.out.println(response.toString());
		} else {
			System.out.println("GET request did not work.");
		}

	}

	private static void sendPOST() throws IOException {
		URL obj = new URL(POST_URL);
		HttpURLConnection con = (HttpURLConnection) obj.openConnection();
		con.setRequestMethod("POST");
		con.setRequestProperty("User-Agent", USER_AGENT);

		// Nur für POST - START
		con.setDoOutput(true);
		OutputStream os = con.getOutputStream();
		os.write(POST_PARAMS.getBytes());
		os.flush();
		os.close();
		// Nur für POST - END

		int responseCode = con.getResponseCode();
		System.out.println("POST Response Code :: " + responseCode);

		if (responseCode == HttpURLConnection.HTTP_OK) { // Erfolg
			BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
			String inputLine;
			StringBuffer response = new StringBuffer();

			while ((inputLine = in.readLine()) != null) {
				response.append(inputLine);
			}
			in.close();

			// Ergebnis ausgeben
			System.out.println(response.toString());
		} else {
			System.out.println("POST request did not work.");
		}
	}

}

Das Code-Beispiel kompilieren und ausführen. Es wird die folgende Ausgabe erzeugen:

Output
GET Response Code :: 200 <html><head> <title>Home</title></head><body><h1> Hello world! </h1><P> The time on the server is March 6, 2015 9:31:04 PM IST. </P></body></html> GET DONE POST Response Code :: 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</h3></body></html> POST DONE

Vergleichen Sie diese Ausgabe mit der HTTP-Antwort im Browser.

Wenn Sie GET– und POST-Anfragen über das HTTPS-Protokoll senden müssen, müssen Sie javax.net.ssl.HttpsURLConnection anstelle von java.net.HttpURLConnection verwenden. HttpsURLConnection wird den SSL-Handshake und die Verschlüsselung verarbeiten.

Schlussfolgerung

In diesem Artikel haben Sie gelernt, wie Sie HttpURLConnection in einem Java-Programm verwenden, um GET– und POST-Anfragen zu senden und dann die Antwort zu drucken.

Setzen Sie Ihr Lernen mit weiteren Java-Tutorials fort.

Source:
https://www.digitalocean.com/community/tutorials/java-httpurlconnection-example-java-http-request-get-post