Hoe te gebruiken Java HttpURLConnection voor HTTP GET en POST verzoeken

Inleiding

De klasse HttpURLConnection uit het pakket java.net kan worden gebruikt om programmatisch een Java HTTP-verzoek te verzenden. In dit artikel leer je hoe je HttpURLConnection kunt gebruiken in een Java-programma om GET– en POST-verzoeken te verzenden en vervolgens de reactie af te drukken.

Vereisten

Voor dit voorbeeld van HttpURLConnection moet je de Spring MVC-zelfstudie hebben afgerond, omdat het URL’s bevat voor de GET– en POST-HTTP-methoden.

Overweeg implementatie op een Tomcat-server op localhost.

Samenvatting SpringMVCExample

Java HTTP GET-verzoek

  • localhost:8080/SpringMVCExample/

Java HTTP GET-verzoek voor inlogpagina

  • localhost:8080/SpringMVCExample/login

Java HTTP POST-verzoek

  • localhost:8080/SpringMVCExample?userName=Pankaj
  • localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123 – voor meerdere parameters

Parameters afleiden van het formulier

De HTML van de inlogpagina bevat het volgende formulier:

<!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>
  • De methode is POST.
  • De actie is home.
    • localhost:8080/SpringMVCExample/home
  • userName is van het type text.

Je kunt een POST-verzoek construeren naar:

localhost:8080/SpringMVCExample/home?userName=Pankaj

Dit zal dienen als basis voor het voorbeeld met HttpURLConnection.

Voorbeeld met HttpURLConnection

Hier zijn de stappen voor het verzenden van Java HTTP-verzoeken met behulp van de klasse HttpURLConnection:

  1. Maak een URL-object van de GET of POST URL-reeks.
  2. Roep de methode openConnection() aan op het URL-object dat een instantie van HttpURLConnection retourneert.
  3. Stel de verzoekmethode in op een HttpURLConnection-instantie (standaardwaarde is GET).
  4. Roep de methode setRequestProperty() aan op de HttpURLConnection-instantie om de waarden van de verzoekheaders in te stellen (zoals "User-Agent", "Accept-Language", enzovoort).
  5. We kunnen getResponseCode() aanroepen om de HTTP-reactiecode te verkrijgen. Op deze manier weten we of het verzoek succesvol is verwerkt of dat er een HTTP-foutbericht is opgetreden.
  6. Voor GET gebruik je Reader en InputStream om de reactie te lezen en dienovereenkomstig te verwerken.
  7. Voor POST moet de code voordat deze de reactie behandelt, de OutputStream van de HttpURLConnection-instantie verkrijgen en POST-parameters erin schrijven.

Hier is een voorbeeldprogramma dat HttpURLConnection gebruikt om Java GET– en POST-verzoeken te verzenden:

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) { // succes
			BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
			String inputLine;
			StringBuffer response = new StringBuffer();

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

			// resultaat afdrukken
			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);

		// Alleen voor POST - START
		con.setDoOutput(true);
		OutputStream os = con.getOutputStream();
		os.write(POST_PARAMS.getBytes());
		os.flush();
		os.close();
		// Alleen voor POST - EIND

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

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

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

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

}

Compileer en voer de code uit. Dit zal de volgende uitvoer produceren:

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

Vergelijk deze uitvoer met de HTTP-reactie in de browser.

Als je GET en POST verzoeken over het HTTPS-protocol moet versturen, moet je javax.net.ssl.HttpsURLConnection gebruiken in plaats van java.net.HttpURLConnection. HttpsURLConnection zal de SSL-handshake en versleuteling afhandelen.

Conclusie

In dit artikel heb je geleerd hoe je HttpURLConnection in een Java-programma kunt gebruiken om GET en POST verzoeken te versturen en vervolgens de reactie af te drukken.

Ga verder met je leerproces met meer Java-tutorials.

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