将 Web 代理与 Java 8 JAX-RS RESTEasy 客户端一起使用

Posted

技术标签:

【中文标题】将 Web 代理与 Java 8 JAX-RS RESTEasy 客户端一起使用【英文标题】:Using web proxy with Java 8 JAX-RS RESTEasy clients 【发布时间】:2015-05-16 15:22:42 【问题描述】:

我似乎无法让 JAX-RS 客户端在 Java 8 上使用 Web 代理。我正在使用 RESTEasy 3.0.10.Final,并在 64 位 Windows 7 Professional 上从 Eclipse 4.4.2 内部运行。

我在localhost 上设置了一个 FreeProxy 服务器,运行在192.168.1.123:3128。我打开登录并 telnet 到 192.168.1.123 3128 并发布手册GET。请求会显示在日志中。

然后我启动我的 Java 应用程序,在系统属性中设置 http.proxyHost=192.168.1.123http.proxyPort=3128。 (我什至在启动 JVM 时尝试过使用 -D。)(请注意,我不希望 localhost problem 发挥作用,因为我连接的是实际 IP 地址,而不是 localhost .)

我使用ClientBuilder.newBuilder().build() 创建一个JAX-RS 客户端并对资源执行GET。 FreeProxy 日志中没有显示任何内容。

为了让 JAX-RS 客户端使用代理,我必须做什么?

【问题讨论】:

未来参考,另见***.com/q/5249734/421049。 另见***.com/q/29083945/421049。 【参考方案1】:

对于 RESTEasy 4,这是我为此所做的:

ResteasyClient client = ((ResteasyClientBuilder) ClientBuilder.newBuilder())
    .defaultProxy(proxyHost, proxyPort)
    .build();

return client
    .target(ENDPOINT_URL)
    .proxy(EndpointResource.class);

【讨论】:

【参考方案2】:

似乎可以通过使用different engine 而不是HttpClient 来使RESTeasy 使用Java 的代理属性(例如-Dhttp.proxyHost)。 java.net.HttpURLConnection 支持开箱即用的代理属性:

ResteasyClient client = new ResteasyClientBuilder().httpEngine(new URLConnectionEngine()).build();

【讨论】:

为我工作! 我可以设置一个系统属性来让 RESTEasy 使用那个 http 引擎吗?我正在使用无法更改 RestEasyClientBuilder 初始化的第三方库。 @TobiasLiefke 我不知道,但我并不是这方面的专家。这仍然是可能的,我也会对此非常感兴趣!【参考方案3】:

ResteasyClientBuilder 提供了一种定义默认代理的方法:

ResteasyClient client = new ResteasyClientBuilder().defaultProxy("localhost", 8080, "http").build();

【讨论】:

我现在正在阅读hc.apache.org/httpcomponents-client-ga/tutorial/html/… 并尝试使用SystemDefaultRoutePlanner 来使用标准的JRE 代理选择器。但是我该如何加入SystemDefaultRoutePlannerHttpClients 类呢? lefloh,您指定的代码有效! (我认为 RESTEasy 为我带来了依赖。)我现在在本地代理服务器日志中获取连接日志。当 Java 已经有配置代理的方法时,我不得不创建一个单独的配置,这是一种耻辱。您能否让我知道如何引入依赖项以使用 SystemDefaultRoutePlanner,如我之前的评论中所述? ...以及如何设置代理以同时用于 HTTP 和 HTTPS?看起来您展示的技术只为其中一个安装了代理。 我更新了我的答案。首先:Resteasy 提供了一种设置默认代理的方法。我以前没看到。但正如你发现的只有一个方案。我认为这可以与您提到的SystemDefaultRoutePlanner 一起使用。我添加了一个使用上面编写的依赖项进行编译的示例。我没有测试。 但是 lefloh 我仍然不明白我需要在 Maven 中包含什么才能给我SystemDefaultRoutePlanner 等。人。你提到的httpclient 包没有这样做。此外,请注意,您的示例与我上面链接的 Apache 文档中的示例不同 --- 与实际 RESTEasy 文档链接的示例不同。无论如何,我需要知道获取HttpClientsSystemDefaultRoutePlanner 的依赖关系。

以上是关于将 Web 代理与 Java 8 JAX-RS RESTEasy 客户端一起使用的主要内容,如果未能解决你的问题,请参考以下文章

apache cxf的jax-rs和jax-ws的区别

测试 JAX-RS Web 服务?

在WebLogic 12c / Jersey上禁用JAX-RS资源的自动注册

使用JAX-RS创建RESTful Web Service

JAX-RS的介绍

[maven] "Dynamic Web Module 3.0 requires Java 1.6 or newer." OR "JAX-RS (REST Web Ser