HTTP GETとPOSTリクエストにJavaのHttpURLConnectionを使用する方法について。
はじめに
Javaのjava.netパッケージから提供されるHttpURLConnectionクラスは、JavaのHTTPリクエストをプログラムで送信するために使用することができます。この記事では、JavaプログラムでHttpURLConnectionを使用してGETリクエストとPOSTリクエストを送信し、その後、レスポンスを出力する方法について学びます。
前提条件
このHttpURLConnectionの例では、GETおよびPOSTのHTTPメソッドに対するURLが必要ですので、Spring MVCチュートリアルを完了している必要があります。
ローカルホストのTomcatサーバーに展開することを検討してください。
SpringMVCExampleの概要
JavaのHTTP GETリクエスト
- localhost:8080/SpringMVCExample/
ログインページのためのJava HTTP GETリクエストを行います。
Note: This translation assumes the phrase refers to a Java programming task.
- localhost:8080/SpringMVCExample/login
JavaでのHTTP POSTリクエスト
- localhost:8080/SpringMVCExample?userName=Pankaj
- localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123 – for multiple params
形式からパラメータを導出する。
ログインページの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>
- The method is POST.
- The action is home.localhost:8080/SpringMVCExample/home
- userName is of type text.
以下のように言い換えることができます:
POSTリクエストを以下のURLに送信できます。
localhost:8080/SpringMVCExample/home?userName=Pankaj
これはHttpURLConnectionの例の基礎となります。
以下は、HttpURLConnectionの例です。
JavaのHttpURLConnectionクラスを使用してJavaのHTTPリクエストを送信する手順を以下に示します。
-
- GETまたはPOSTのURL文字列からURLオブジェクトを作成します。
-
- URLオブジェクトに対してopenConnection()メソッドを呼び出し、HttpURLConnectionのインスタンスを返します。
-
- HttpURLConnectionインスタンスでリクエストメソッドを設定します(デフォルト値はGETです)。
-
- HttpURLConnectionインスタンスにsetRequestProperty()メソッドを呼び出してリクエストヘッダーの値(User-Agent、Accept-Languageなど)を設定します。
-
- getResponseCode()を呼び出すことで、レスポンスのHTTPコードを取得できます。これにより、リクエストが処理されたか、HTTPエラーメッセージが発生したかが分かります。
-
- GETの場合は、ReaderとInputStreamを使用してレスポンスを読み取り、それに応じて処理します。
- POSTの場合は、コードがレスポンスを処理する前に、HttpURLConnectionインスタンスからOutputStreamを取得し、POSTパラメータを書き込む必要があります。
以下は、JavaのGETとPOSTリクエストを送信するためにHttpURLConnectionを使用する例のプログラムです。
package com.scdev.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レスポンスとこの出力を比較してください。
HTTPSプロトコルを介してGETおよびPOSTリクエストを送信する必要がある場合は、java.net.HttpURLConnectionの代わりにjavax.net.ssl.HttpsURLConnectionを使用する必要があります。HttpsURLConnectionはSSLハンドシェイクと暗号化を処理します。
結論
この記事では、JavaプログラムでHttpURLConnectionを使用してGETリクエストとPOSTリクエストを送信し、応答を出力する方法を学びました。
さらなるJavaのチュートリアルで学習を続けてください。