检测 socks 代理报错: Cannot invoke " Java .net.InetAddress.getHostName()" because "remote" is null
Mrdawu:
/** * 使用指定代理测试连接并返回代理的外网 IP * * @param url 测试 URL * @param proxyType 代理类型( HTTP 或 SOCKS ) * @param gateIp 代理 IP * @param gatePort 代理端口 * @param username 代理用户名(可为 null ) * @param password 代理密码(可为 null ) * @return 代理的外网 IP 地址 * @throws IOException IO 异常 */ public static String testProxy(String url, ProxyType proxyType, String gateIp, int gatePort, String username, String password) throws IOException { Proxy proxy = new Proxy( proxyType == ProxyType.SOCKS ? Proxy.Type.SOCKS : Proxy.Type.HTTP, new InetSocketAddress(gateIp, gatePort) );
if (proxyType == ProxyType.SOCKS) {
Authenticator.setDefault(new Authenticator() {
private final PasswordAuthentication authentication = new PasswordAuthentication(
username, password.toCharArray());
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return authentication;
}
});
}
OkHttpClient.Builder clientBuilder = new OkHttpClient().newBuilder().proxy(proxy);
if (proxyType == ProxyType.HTTP && username != null && password != null) {
clientBuilder.proxyAuthenticator((route, response) -> {
String credential = Credentials.basic(username, password);
return response.request().newBuilder()
.header("Proxy-Authorization", credential)
.build();
});
}
clientBuilder.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS);
OkHttpClient client = clientBuilder.build();
Request request = new Request.Builder().url(url).build();
try (Response response = client.newCall(request).execute()) {
if (response.body() != null) {
String responseBody = response.body().string();
JSONObject jsonObject = JSON.parseObject(responseBody);
return jsonObject.getString("origin");
} else {
throw new IOException("响应体为空");
}
}
}
有没有大佬帮忙看下是为啥,本地运行正常,但是部署服务器就会报错 Cannot invoke "java.net.InetAddress.getHostName()" because "remote" is null