Клиент и прокси Java Jersey 2

Я использую Jersey 2.11 для доступа к REST API слияния и получения оттуда контента.

import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.glassfish.jersey.apache.connector.ApacheClientProperties;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

....

HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic(
    "confluenceUsername", "confluencePassword"
);

ClientConfig cc = new ClientConfig();
cc.property(ClientProperties.PROXY_URI, "xx.xx.xx.xx:xxxx");
Client client = ClientBuilder.newClient(cc);

client.register(feature);

WebTarget target = client.target(credential.getUrl())
    .path("rest").path("api").path("content").path(id)
    .queryParam("expand", "space,body.storage,version,container,ancestors");

Response response = target.request().get();

Является ли это текущим правильным способом использования прокси в Java с Jersey 2.11? Я всегда получаю исключение

java.net.ConnectException: Connection refused: connect
javax.ws.rs.ProcessingException: java.net.Connect Exception: Connection refused: connect
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:229)
...

Сайт слияния, к которому я хочу получить доступ, использует https. На машине, которой не нужен прокси, он работает

HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic(
    "confluenceUsername", "confluencePassword");
Client client = ClientBuilder.newClient();
client.register(feature);

так что Confluence - не проблема. Я думаю, что что-то не так со спецификацией прокси, но не знаю что.


person user1791139    schedule 27.11.2014    source источник
comment
stackoverflow.com/a/2684496/2078908   -  person ursa    schedule 27.11.2014
comment
@ursa, вы имеете в виду, что моя конфигурация прокси обновлена ​​до версии jersey 2.11, и проблема в том, что я не принимаю отсутствующий сертификат SSL?   -  person user1791139    schedule 27.11.2014
comment
Ага. похоже ваш клиент не принимает сертификат от прокси, поэтому предлагаю вам покопаться в этой стороне.   -  person ursa    schedule 27.11.2014
comment
Я предлагаю использовать эту stackoverflow.com/a/9541524/1791139, но код предназначен для старой версии Джерси 1, не так ли? есть ли какой-нибудь пример для текущей версии 2.11, которая принимает все сертификаты SSL?   -  person user1791139    schedule 27.11.2014
comment
@ user1791139 см. решение stackoverflow.com/questions/18942648/ с соединителем apache   -  person Dejell    schedule 23.03.2015


Ответы (2)


Я не мог управлять прокси в клиенте jersey, поэтому я использую создание клиента по умолчанию

HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic(
    "confluenceUsername", "confluencePassword");
Client client = ClientBuilder.newClient();
client.register(feature);

и запустите мое приложение с

java -Dhttps.proxyHost=xx.xx.xx.xx -Dhttps.proxyPort:xxxx -jar myApp.jar

Если кто-то найдет правильное решение, чтобы справиться с этим с помощью jersey 2.11, не стесняйтесь публиковать ответ :)

person user1791139    schedule 27.11.2014
comment
да - см. ответ stackoverflow.com/questions/18942648/ - person Dejell; 23.03.2015

Не могли бы вы попробовать следующий код. Я использую Jersey 2.0.1, и я могу установить прокси-сервер в объекте clientConfig. И он работает

ClientConfig config = new ClientConfig();
config.connectorProvider(new ApacheConnectorProvider());
config.property(ClientProperties.PROXY_URI, "proxy_url");
config.property(ClientProperties.PROXY_USERNAME,"user_name");
config.property(ClientProperties.PROXY_PASSWORD,"password");
Client client = ClientBuilder.newClient(config);
person Fazeem    schedule 23.05.2019