Поиск по сайту:

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


Введение

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

Предпосылки

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

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

Резюме SpringMVCExample

GET-запрос Java HTTP

  • localhost:8080/SpringMVCExample/

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

  • localhost:8080/SpringMVCExample/логин

POST-запрос Java HTTP

  • 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>

  • метод — это POST.
  • action home.
    • localhost:8080/SpringMVCExample/home

    Вы можете создать запрос 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:

    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) { // success
    			BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    			String inputLine;
    			StringBuffer response = new StringBuffer();
    
    			while ((inputLine = in.readLine()) != null) {
    				response.append(inputLine);
    			}
    			in.close();
    
    			// print result
    			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);
    
    		// For POST only - START
    		con.setDoOutput(true);
    		OutputStream os = con.getOutputStream();
    		os.write(POST_PARAMS.getBytes());
    		os.flush();
    		os.close();
    		// For POST only - END
    
    		int responseCode = con.getResponseCode();
    		System.out.println("POST Response Code :: " + responseCode);
    
    		if (responseCode == HttpURLConnection.HTTP_OK) { //success
    			BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    			String inputLine;
    			StringBuffer response = new StringBuffer();
    
    			while ((inputLine = in.readLine()) != null) {
    				response.append(inputLine);
    			}
    			in.close();
    
    			// print result
    			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.