【问题标题】:Using web proxy with Java 8 JAX-RS RESTEasy clients将 Web 代理与 Java 8 JAX-RS RESTEasy 客户端一起使用
【发布时间】: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 客户端使用代理,我必须做什么?

【问题讨论】:

标签: eclipse jax-rs resteasy http-proxy


【解决方案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 的依赖关系。
    猜你喜欢
    • 2017-05-05
    • 1970-01-01
    • 2019-09-25
    • 2018-11-18
    • 1970-01-01
    • 2016-12-06
    • 2023-03-10
    • 2016-02-21
    • 1970-01-01
    相关资源
    最近更新 更多