■ サンプル
以下の環境下を想定する
* プロキシサーバ :192.168.211.123
* プロキシサーバポート:3128
* 認証ID :admin
* 認証パスワード :password
ProxySettingChecker.java
別プロセスとして実行したいJava。 ProxySettingChecker.jar にする import java.io.IOException;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;
public class ProxySettingChecker {
private static final int TIMEOUT = 5_000;
/**
*
* @param args
*
* <pre>
* args[0] : 対象URL(http://xxxx) (Required)
* args[1] : Proxy Host (Required)
* args[2] : Proxy Port (Required)
* args[3] : User Name (Optional)
* args[4] : Password (Optional)
* </pre>
*
* @throws Exception
*/
public static void main(String[] args) throws Exception {
if (args == null || args.length < 3) {
throw new IllegalArgumentException("Illegal Arguments");
}
System.out.println("args.length : " + args.length);
String targetUrl = args[0];
String proxyHost = args[1];
int proxyPort = Integer.valueOf(args[2]);
if (args.length >= 5) {
String userName = args[3];
String password = args[4];
if (userName != null && password != null) {
System.out.println(userName + " " + password);
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password.toCharArray());
}
});
}
}
int responseCode = ProxySettingChecker.connectUsingProxy(proxyHost, proxyPort, targetUrl, TIMEOUT);
if (ProxySettingChecker.isValidResponse(responseCode)) {
System.out.println("OK Setting");
return;
}
System.err.println("NG Setting");
System.exit(responseCode);
}
private static int connectUsingProxy(String proxyHost, int proxyPort, String url, int timeout) {
try {
URL targetUrl = new URL(url);
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
HttpURLConnection connection = (HttpURLConnection) targetUrl.openConnection(proxy);
connection.setConnectTimeout(timeout);
connection.setReadTimeout(timeout);
connection.setRequestMethod("HEAD");
return connection.getResponseCode();
} catch (IOException ex) {
return -1;
}
}
private static boolean isValidResponse(int responseCode) {
return 200 <= responseCode && responseCode <= 399;
}
}
Main.java
呼び出し側 //import java.io.BufferedReader;
//import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
System.out.println("Test1-1 : OK");
try {
execute("java", "-jar", "ProxySettingChecker.jar", "http://www.msn.com/ja-jp","192.168.211.123", "3128", "admin", "password");
Thread.sleep(1000L);
System.out.println();
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("Test1-2 : NG");
try {
execute("java", "-jar", "ProxySettingChecker.jar", "http://www.msn.com/ja-jp","192.168.211.123", "3128", "admin", "dummy");
Thread.sleep(1000L);
System.out.println();
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("Test1-3 : NG");
try {
execute("java", "-jar", "ProxySettingChecker.jar", "http://www.msn.com/ja-jp","192.168.211.123", "3128", "dummy", "password");
Thread.sleep(1000L);
System.out.println();
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("Test1-4 : NG");
try {
execute("java", "-jar", "ProxySettingChecker.jar", "http://www.msn.com/ja-jp","192.168.211.123", "3128");
Thread.sleep(1000L);
System.out.println();
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("Test2-1 : NG");
try {
execute("java", "-jar", "ProxySettingChecker.jar", "http://www.msn.com/ja-jp","192.168.211.1", "3128", "admin", "password");
Thread.sleep(1000L);
System.out.println();
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("Test2-2 : NG");
try {
execute("java", "-jar", "ProxySettingChecker.jar", "http://www.msn.com/ja-jp","192.168.211.123", "3129", "admin", "password");
Thread.sleep(1000L);
System.out.println();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static void execute(String... commands) {
ProcessBuilder processBuilder = new ProcessBuilder(commands);
try {
Process process = processBuilder.start();
int result = process.waitFor();
System.out.println("Result Code : " + result);
if (result != 0) {
System.err.println("Error!");
}
// try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
// String line;
// while ((line = bufferedReader.readLine()) != null) {
// System.out.println(line);
// }
// }
// try (BufferedReader errorBufferedreader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
// String errorLine;
// while ((errorLine = errorBufferedreader.readLine()) != null) {
// System.err.println(errorLine);
// }
// }
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
出力結果
Test1-1 : OK
Result Code : 0
Test1-2 : NG
Result Code : 407
Error!
Test1-3 : NG
Result Code : 407
Error!
Test1-4 : NG
Result Code : 407
Error!
Test2-1 : NG
Result Code : -1
Error!
Test2-2 : NG
Result Code : -1
Error!