将 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.123
和 http.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 代理选择器。但是我该如何加入SystemDefaultRoutePlanner
和HttpClients
类呢?
lefloh,您指定的代码有效! (我认为 RESTEasy 为我带来了依赖。)我现在在本地代理服务器日志中获取连接日志。当 Java 已经有配置代理的方法时,我不得不创建一个单独的配置,这是一种耻辱。您能否让我知道如何引入依赖项以使用 SystemDefaultRoutePlanner
,如我之前的评论中所述?
...以及如何设置代理以同时用于 HTTP 和 HTTPS?看起来您展示的技术只为其中一个安装了代理。
我更新了我的答案。首先:Resteasy 提供了一种设置默认代理的方法。我以前没看到。但正如你发现的只有一个方案。我认为这可以与您提到的SystemDefaultRoutePlanner
一起使用。我添加了一个使用上面编写的依赖项进行编译的示例。我没有测试。
但是 lefloh 我仍然不明白我需要在 Maven 中包含什么才能给我SystemDefaultRoutePlanner
等。人。你提到的httpclient
包没有这样做。此外,请注意,您的示例与我上面链接的 Apache 文档中的示例不同 --- 与实际 RESTEasy 文档链接的示例不同。无论如何,我需要知道获取HttpClients
和SystemDefaultRoutePlanner
的依赖关系。以上是关于将 Web 代理与 Java 8 JAX-RS RESTEasy 客户端一起使用的主要内容,如果未能解决你的问题,请参考以下文章
在WebLogic 12c / Jersey上禁用JAX-RS资源的自动注册
[maven] "Dynamic Web Module 3.0 requires Java 1.6 or newer." OR "JAX-RS (REST Web Ser