Javaの標準ライブラリを用いてHTTP通信を実装する手順を解説します。
通信手順
- URLオブジェクトからURLConnectionを取得
- リクエストパラメータの設定
- リクエストの送出
- 応答内容の取得(InputStream経由)
- リソースの解放
クライアント側処理
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpClient {
public static void main(String[] args) {
try {
System.out.println(sendGetRequest("http://localhost:8080/HttpServer"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String sendGetRequest(String endpoint) throws Exception {
URL targetUrl = new URL(endpoint);
HttpURLConnection connection = (HttpURLConnection) targetUrl.openConnection();
connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
if (connection.getResponseCode() >= 300) {
throw new Exception("リクエスト失敗: HTTP " + connection.getResponseCode());
}
StringBuilder response = new StringBuilder();
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
}
return response.toString();
}
}
GETリクエストコード
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpClient {
public static void main(String[] args) {
try {
System.out.println(sendPostRequest("http://localhost:8080/HttpServer",
"user=sample&token=abc123"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String sendPostRequest(String endpoint, String parameters) throws Exception {
URL targetUrl = new URL(endpoint);
HttpURLConnection connection = (HttpURLConnection) targetUrl.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", String.valueOf(parameters.length()));
if (connection.getResponseCode() >= 300) {
throw new Exception("リクエスト失敗: HTTP " + connection.getResponseCode());
}
StringBuilder response = new StringBuilder();
try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream())) {
writer.write(parameters);
writer.flush();
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
}
}
return response.toString();
}
}
POSTリクエストコード
サーバー側処理
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class DataReceiverServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String userInput = request.getParameter("user");
String authKey = request.getParameter("token");
System.out.println("ユーザー: " + userInput);
System.out.println("トークン: " + authKey);
response.setContentType("text/plain;charset=UTF-8");
response.getWriter().write("受信完了");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
doPost(request, response);
}
}
Servletコード
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>DataReceiver</servlet-name>
<servlet-class>DataReceiverServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DataReceiver</servlet-name>
<url-pattern>/receive</url-pattern>
</servlet-mapping>
</web-app>
web.xml設定
実例:地図API利用
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class MapServiceClient {
public static void main(String[] args) {
try {
System.out.println(sendRequest("http://api.map.baidu.com/geoconv/v1/?",
"coords=114.21892734521,29.575429778924&ak=ZQU8ZGeBf95nN8wY1cNL13NP&output=json"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String sendRequest(String baseUrl, String parameters) throws Exception {
URL targetUrl = new URL(baseUrl + parameters);
URLConnection connection = targetUrl.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/5.0");
connection.setRequestProperty("Accept", "*/*");
StringBuilder response = new StringBuilder();
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
}
return response.toString();
}
}
API利用コード