簡體   English   中英

如何在Jersey和Apache Http客戶端上使用代理身份驗證?

[英]How to use Proxy authentication with Jersey and Apache Http client?

我正在將Jersey客戶端與ApacheConnection Provider一起使用。

    Builder builder = RequestConfig.custom().setConnectTimeout(timeout);
    List<Proxy> proxies = ProxyManager.getInstance().select(baseUrl.toURI());
    if (useProxy) {
        ...
        builder.setProxy(new HttpHost(proxyUri.getHost(), proxyUri.getPort()));
    }
    RequestConfig requestConfig = builder.build();

    final ClientConfig clientConfig = new ClientConfig();
    clientConfig.property(ApacheClientProperties.REQUEST_CONFIG, requestConfig);
    clientConfig.connectorProvider(new ApacheConnectorProvider());

    client = ClientBuilder.newBuilder().withConfig(clientConfig).sslContext(getSSLContext()).build();
    client.property(ClientProperties.CONNECT_TIMEOUT, 5000);

但是,如何為代理身份驗證添加用戶名和密碼?

似乎apache連接提供程序未使用標准的Java代理選擇器機制。

我終於找到了解決方案。 不幸的是,這沒有記載:

HttpHost proxyhost = new HttpHost(host,pw);

CredentialsProvider credsProvider = new BasicCredentialsProvider();

credsProvider.setCredentials(new AuthScope(proxyhost), new UsernamePasswordCredentials(user, pw));
clientConfig.property(ApacheClientProperties.CREDENTIALS_PROVIDER, credsProvider);

builder.setProxy(proxyhost);

我認為您應該再添加幾行代碼

builder.setProxy(proxyhost).setDefaultCredentialsProvider(credsProvider)
                            .setProxyAuthenticationStrategy(new ProxyAuthenticationStrategy());

否則,它不會真正對我感覺到的代理主機進行身份驗證。 在您的情況下,它可能會繞過代理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM