首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 代理上網完整指南:HTTP/SOCKS/FTP 代理配置與認證實戰

     編輯:Java 程式設計入門

企業內網常透過代理伺服器管控外部存取。Java 應用若不支援代理,將無法呼叫外部 API、下載資源。本文詳述 JVM 系統屬性配置、程式碼動態設定、各類代理協定與認證處理。

HTTP 代理:系統屬性靜態配置

System.setProperty("proxySet", "true");
System.setProperty("proxyHost", "proxy.mycompany.com");
System.setProperty("proxyPort", "8080");

須在建立任何 URL/HttpURLConnection 之前 設定,建議在 `main()` 或靜態初始化塊最前端執行。

代理認證:Basic Auth 標頭注入

String userPass = "username:password";
String encoded = "Basic " + Base64.getEncoder().encodeToString(userPass.getBytes(StandardCharsets.UTF_8));
URL url = new URL("https://java.sun.com/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Proxy-Authorization", encoded);

注意:JDK 1.1.x 需手工加 Basic 前綴;JDK 1.2+ `Authenticator.setDefault()` 可全域自動處理。

FTP 代理專用屬性

System.setProperty("ftpProxySet", "true");
System.setProperty("ftpProxyHost", "proxy.mycompany.com");
System.setProperty("ftpProxyPort", "8080");
// 之後即可直接 new URL("ftp://ftp.example.com/file.txt") 存取

SOCKS 4/5 代理

System.setProperty("socksProxySet", "true");
System.setProperty("socksProxyHost", "socks.mycompany.com");
System.setProperty("socksProxyPort", "1080"); // SOCKS 預設埠

適用於非 HTTP 協定(如原生 Socket、RMI、JDBC 連線)穿透防火牆。

JDK 版本相容性提醒

版本已知問題解法
JDK 1.1.7 (WebSphere 3.0)系統屬性無效,`getInputStream()` 逾時或找不到主機使用 `new URL(protocol, host, port, file, handler)` 手工指定代理主機/埠
JDK 1.2+無優先使用 `Authenticator` + 系統屬性

最佳實務

  1. 集中管理代理配置於外部屬性檔,啟動時注入系統屬性。
  2. 生產環境強制啟用 HTTPS 代理,避免明文傳輸認證資訊。
  3. 單元測試模擬代理環境,驗證連線與認證邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved