Как использовать Java HttpURLConnection для HTTP GET и POST запросов

Введение

Класс HttpURLConnection из пакета java.net может быть использован для отправки HTTP-запросов на Java программно. В этой статье вы узнаете, как использовать HttpURLConnection в программе на Java для отправки запросов GET и POST, а затем распечатать ответ.

Предварительные условия

Для этого примера использования HttpURLConnection вы должны быть знакомы с учебником Spring MVC, потому что в нем содержатся URL-адреса для методов HTTP GET и POST.

Рассмотрите возможность развертывания на локальный сервер localhost Tomcat.

Обзор примера SpringMVCExample

Запрос HTTP GET на Java

  • localhost:8080/SpringMVCExample/

Запрос HTTP GET на страницу входа

  • localhost:8080/SpringMVCExample/login

Запрос HTTP POST на Java

  • localhost:8080/SpringMVCExample?userName=Pankaj
  • localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123 – для нескольких параметров

Извлечение параметров из формы

HTML-код страницы входа содержит следующую форму:

<!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>
  • Метод methodPOST.
  • Действие actionhome.
    • localhost:8080/SpringMVCExample/home
  • userName имеет тип text.

Вы можете создать запрос POST к:

localhost:8080/SpringMVCExample/home?userName=Pankaj

Это будет служить основой для примера с HttpURLConnection.

Пример HttpURLConnection

Вот шаги для отправки HTTP-запросов на Java с использованием класса HttpURLConnection:

  1. Создайте объект URL из строки URL-адреса для GET или POST.
  2. Вызовите метод openConnection() для объекта URL, который возвращает экземпляр HttpURLConnection.
  3. Установите метод запроса в экземпляре HttpURLConnection (значение по умолчанию – GET).
  4. Вызовите метод setRequestProperty() на экземпляре HttpURLConnection, чтобы установить значения заголовков запроса (например, "User-Agent", "Accept-Language" и т. д.).
  5. Мы можем вызвать getResponseCode(), чтобы получить код ответа HTTP. Таким образом, мы узнаем, был ли запрос обработан успешно, или же было выброшено какое-либо сообщение об ошибке HTTP.
  6. Для GET используйте Reader и InputStream, чтобы прочитать ответ и обработать его соответственно.
  7. Для POST перед тем, как код обработает ответ, ему необходимо получить OutputStream из экземпляра HttpURLConnection и записать в него параметры POST.

Вот пример программы, использующей HttpURLConnection для отправки запросов Java GET и POST:

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

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

			// печать результата
			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);

		// Только для POST - НАЧАЛО
		con.setDoOutput(true);
		OutputStream os = con.getOutputStream();
		os.write(POST_PARAMS.getBytes());
		os.flush();
		os.close();
		// Только для POST - КОНЕЦ

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

		if (responseCode == HttpURLConnection.HTTP_OK) { // успех
			BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
			String inputLine;
			StringBuffer response = new StringBuffer();

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

			// печать результата
			System.out.println(response.toString());
		} else {
			System.out.println("POST request did not work.");
		}
	}

}

Скомпилируйте и запустите код. Он выведет следующий результат:

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

Сравните этот вывод с ответом HTTP в браузере.

Если вам необходимо отправить запросы GET и POST по протоколу HTTPS, то вам следует использовать javax.net.ssl.HttpsURLConnection вместо java.net.HttpURLConnection. HttpsURLConnection будет обрабатывать SSL-рукопожатие и шифрование.

Заключение

В этой статье вы узнали, как использовать HttpURLConnection в программе на Java для отправки запросов GET и POST, а затем распечатать ответ.

Продолжайте обучение с дополнительными учебниками по Java.

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