社内ネットワークや閉域環境では、インターネット通信は必ずプロキシサーバ経由というケースが多くあります。
そのため、JavaでREST APIを呼び出そうとしても、
-
接続できない
-
タイムアウトする
-
認証エラーになる
といったトラブルに遭遇しがちです。
この記事では、Javaでプロキシ経由でREST APIを呼び出す代表的な方法を、実務向けに分かりやすく解説します。
プロキシ経由通信の仕組み(全体像)
通常の通信では、Javaアプリは直接APIサーバに接続します。
しかしプロキシ環境では、Java → プロキシ → REST API という経路になります。
そのため Java 側で、
-
プロキシの ホスト名
-
ポート番号
-
(必要に応じて)認証情報
を正しく設定する必要があります。
方法①:Javaのシステムプロパティで設定する(最も簡単)
HTTP / HTTPS プロキシ設定
この設定を行うと、HttpURLConnection や HttpClient など、
JVM全体の通信がプロキシ経由になります。
特徴
-
✅ 実装が簡単
-
❌ JVM全体に影響する
-
❌ 個別の通信で切り替えられない
方法②:HttpURLConnection でプロキシを明示指定する
サンプルコード
特徴
-
✅ 特定の通信だけプロキシを使える
-
✅ 既存コードへの影響が少ない
-
❌ 記述量がやや多い
方法③:Java 11 HttpClient でプロキシ設定(推奨)
Java 11 以降では HttpClient が標準化され、
モダンで読みやすいコードが書けます。
サンプルコード
特徴
-
✅ 現在の主流
-
✅ 非同期通信も可能
-
✅ プロキシ指定が明確
-
🔥 新規開発では最有力
プロキシ認証(ID / パスワード)が必要な場合
Basic認証付きプロキシ対応例
※ 社内プロキシでは必須になることが非常に多い設定です。
よくあるエラーと原因
| エラー内容 | 主な原因 |
|---|---|
| Connection timed out | プロキシ未設定 / ポート違い |
| 407 Proxy Authentication Required | 認証情報未設定 |
| SSLHandshakeException | HTTPSプロキシ or 証明書問題 |
| UnknownHostException | DNSがプロキシ経由で解決されていない |
社内・閉域環境での実務ポイント
-
プロキシ設定は OS / JVM / Javaコード のどこで行っているか整理する
-
HTTPS通信時は 社内証明書 のインポートが必要な場合あり
-
バッチサーバ・JP1実行時は 起動ユーザーの環境変数にも注意
まとめ
-
Javaでプロキシ経由のREST API通信は 正しい設定が必須
-
Java 11以降なら HttpClient + ProxySelector が最もおすすめ
-
認証付きプロキシは Authenticator設定を忘れない
-
社内ネットワークでは 証明書・実行環境差分 に要注意

