使用 OkHttp 连接到 HTTPS 代理

Ami*_*imi 6 java ssl tunneling http-proxy okhttp

我们的环境只允许 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();
Run Code Online (Sandbox Code Playgroud)

我们使用鱿鱼(作为 HTTP 代理)对其进行了测试。但我们发现这在真实环境中行不通。因为代理是 HTTPS(SSL 或 TLS 隧道?)而不是 HTTP。

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

export https_proxy='http://domain\user:password@prox-server:port'
Run Code Online (Sandbox Code Playgroud)

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

顺便说一句,我们无法通过设置系统属性等来配置 JVM 通过代理http.proxyHost路由http.proxyPort所有https.proxyHost流量https.proxyPort

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

Yur*_*mke 1

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

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