Как добавить HTTP-прокси для клиента Jersey2
легко установить прокси для клиента на Jersey1.x:
config.getProperties().put(ApacheHttpClientConfig.PROPERTY_PROXY_URI, proxyUrl);
но как добавить HTTP-прокси для Jersey2.x клиент? Я проверил исходный код и не нашел реализации в:
org.в GlassFish.Джерси.клиент.HttpUrlConnector
спасибо!
5 ответов
спасибо @feuyeux, решение работает для меня, ps, код ниже работает в прокси с http basic auth:
ClientConfig config = new ClientConfig();
config.connectorProvider(new ApacheConnectorProvider());
config.property(ClientProperties.PROXY_URI, proxy);
config.property(ClientProperties.PROXY_USERNAME,user);
config.property(ClientProperties.PROXY_PASSWORD,pass);
Client client = JerseyClientBuilder.newClient(config);
надеюсь помочь другим
установить другой прокси во время выполнения не является хорошим решением. Соответственно, я использовал Apache connector для этого:
добавить Apache connector зависимость определена:
<dependency>
<groupId>org.glassfish.jersey.connectors</groupId>
<artifactId>jersey-apache-connector</artifactId>
</dependency>
добавить соединитель apache в клиент
config.property(ApacheClientProperties.PROXY_URI, proxyUrl);
Connector connector = new ApacheConnector(config);
config.connector(connector);
Если вы используете http-соединитель jersey 2.0 по умолчанию(который является JDK Http (S)URLConnection). Вы можете просто настроить прокси-сервер, например:
System.setProperty ("http.proxyHost", "proxy_server");
System.setProperty ("http.proxyPort", "proxy_port");
для других реализаций http connector (Apache HTTP Client и Grizzly Asynchronous Client) я раньше не пробовал. Но я думаю,что вы могли бы следовать инструкции самим http connector.
это решение сработало для меня
пом.в XML
<dependency>
<groupId>org.glassfish.jersey.connectors</groupId>
<artifactId>jersey-apache-connector</artifactId>
<version>2.17</version>
</dependency>
Java
ClientConfig config = new ClientConfig();
config.property( ClientProperties.PROXY_URI, "http://_YOUR_URI_:_YOUR_PORT_" );
config.connectorProvider( new ApacheConnectorProvider() );
Client client = ClientBuilder.newClient( config );
надеюсь, что это поможет:)
альтернатива без include jersey-apache-connector
public class Sample {
public static void main(String[] args) {
// you can skip AUTH filter if not required
ClientConfig config = new ClientConfig(new SampleProxyAuthFilter());
config.connectorProvider(
new HttpUrlConnectorProvider().connectionFactory(new SampleConnectionFactory()));
Client client = ClientBuilder.newClient(config);
// there you go
}
}
class SampleConnectionFactory implements HttpUrlConnectorProvider.ConnectionFactory {
@Override
public HttpURLConnection getConnection(URL url) throws IOException {
return (HttpURLConnection) url
.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("host", 8080)));
}
}
class SampleProxyAuthFilter implements ClientRequestFilter {
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
requestContext.getHeaders().add("Proxy-Authorization", "authentication");
}
}