Отправка HTTP-запросов GET и POST в Java

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

Требования

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

Краткое описание SpringMVCExample

Читайте также: Основы работы Spring: аннотация @Configuration

GET-запрос в Java:

  • localhost:8080/SpringMVCExample/

HTTP-запрос GET в Java для страницы входа в систему

  • localhost: 8080/SpringMVCExample/login

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>

Где:

  • method — POST.
  • action — home.
    • localhost: 8080/SpringMVCExample/home
  • У userName тип text.

Мы можем создать POST-запрос для:

localhost:8080/SpringMVCExample/home?userName=Pankaj

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

Пример HttpURLConnection

Ниже описаны шаги по отправке HTTP-запросов с помощью класса HttpURLConnection:

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

Пример программы, которая с помощью HttpURLConnection отправляет запросы 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.");
}
}

}

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

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, то вместо java.net.HttpURLConnection нужно использовать javax.net.ssl.HttpsURLConnection. HttpsURLConnection будет обрабатывать SSL рукопожатия и шифрование.

Подводим итоги

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

Tags: ,

Добавить комментарий