如果使用Apache的HttpClient,您可以创建自定义DNS解析程序来检测要重定向的主机,然后提供替代IP地址。
注意:仅更改 HTTPS 请求的主机标头不起作用。它会抛出“javax.net.ssl.SSLPeerUnverifiedException”,迫使你信任坏证书,阻止SNI工作等,所以真的不是一个选择。自定义DnsResolver是我发现的让这些请求在Java中使用HTTPS的唯一干净方法。
例:
DnsResolver dnsResolver = new SystemDefaultDnsResolver() {
@Override
public InetAddress[] resolve(final String host) throws UnknownHostException {
if (host.equalsIgnoreCase("my.host.com")) {
return new InetAddress[] { InetAddress.getByName("127.0.0.1") };
} else {
return super.resolve(host);
}
}
};
BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager(
RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build(),
null,
null,
dnsResolver
);
HttpClient httpClient = HttpClientBuilder.create()
.setConnectionManager(connManager)
.build();
HttpGet httpRequest = new HttpGet("https://my.host.com/page?and=stuff");
HttpResponse httpResponse = httpClient.execute(httpRequest);