使用OkHttp连接到HTTPS代理

6

我们的环境仅允许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应用程序无法工作,也不能使用这个代理路由流量。

顺便提一下,我们无法通过设置系统属性http.proxyHosthttp.proxyPorthttps.proxyHosthttps.proxyPort等来配置JVM以通过代理路由所有流量。

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


也许这个对你有帮助:https://dev59.com/vnVD5IYBdhLWcg3wAWkO - PeterMmm
@PeterMmm,就像我说的那样,它没有起作用。 - Amir Karimi
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接