使用OkHttp连接到HTTPS代理

时间:2016-09-01 09:56:33

标签: java ssl okhttp http-proxy tunneling

我们的环境只允许HTTPS连接,因此它们为我们提供了HTTPS代理,这是连接外部世界的唯一方式。我们必须通过此代理以及我们的Java应用程序(使用OkHttp作为其HTTP客户端)来路由所有流量。

我们已经设置了这样的代理:

Authenticator proxyAuthenticator = new Authenticator() {
    @Override
    public Request authenticate(Route route, Response response) throws IOException {
        String credential = Credentials.basic(username, password);
        return response.request().newBuilder()
                .header("Proxy-Authorization", credential)
                .build();
    }
};

return builder
        .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)))
        .proxyAuthenticator(proxyAuthenticator)
        .build();

我们使用squid(作为HTTP代理)测试它。但我们发现这在现实环境中并不起作用。因为代理是HTTPS(SSL或TLS隧道?)而不是HTTP。

我们可以强制所有其他Linux应用程序(如 wget )通过设置以下环境变量来使用https代理:

export https_proxy='http://domain\user:password@prox-server:port'

但Java应用程序无法正常工作,无法使用此代理路由流量。

BTW我们无法通过设置系统属性http.proxyHosthttp.proxyPorthttps.proxyHosthttps.proxyPort等来配置JVM来通过代理路由所有流量。

是否有任何简单直接的方法为Java应用程序设置HTTPS代理?

1 个答案:

答案 0 :(得分:0)

对于HTTPS,您需要使用https.proxyHost和https.proxyPort

https://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html