Quarkus 休息客户端不遵守 -Dhttp.proxyHost -Dhttp.proxyPort 代理选项
Quarkus rest client not respecting -Dhttp.proxyHost -Dhttp.proxyPort proxy options
我想指定我的 Quarkus 应用程序 (v2.8.3.Final) 使用 HTTP 代理 而不更改任何代码
为了尝试这个,我将 -Dhttp.proxyHost
和 -Dhttp.proxyPort
选项传递给终端,如下所示:
./mvnw quarkus:dev -Dquarkus.http.host=0.0.0.0 -Dquarkus.http.port=9000 -Ddebug=9001 -Dhttp.proxyHost=localhost -Dhttp.proxyPort=6969
- 这 适用于 其他基于 Jersey 和 Tomcat
的 Java 应用程序
- 这 也适用于 另一个 Quarkus 应用程序,(在另一点创建,但我确保 Quarkus 版本相同,v2.8。3.Final 在
pom.xml
)
比较工作的 quarkus 应用程序和有问题的应用程序
为了比较工作中的 quarkus 应用程序 (A) 和另一个 (B) 我已经实现了一个发送请求的资源至 http://google.com
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;
.
.
.
@GET
@Path("/google")
@Produces(MediaType.TEXT_PLAIN)
public String google() {
Client client = ClientBuilder.newClient();
return client.target("http://www.google.com")
.request(MediaType.TEXT_PLAIN)
.get()
.readEntity(String.class);
}
并且我已确保 Quarkus 版本相同。这是来自 pom.xml
的 minimal 片段
<properties>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>2.8.3.Final</quarkus.platform.version>
</properties>
Application A 成功将其请求传递给代理服务器,而 B 不会。比较它们的 pom.xml
文件和 application.properties
文件时,这两个应用程序非常相似。我正在努力指出相关差异。我想至少得到一些关于我可以在哪里解决这个问题的指示。
除了通过 -Dhttp.proxyHost
和 -Dhttp.proxyPort
之外我还尝试过的其他事情:
在应用程序属性中,指定
org.jboss.resteasy.jaxrs.client.proxy.host=http://localhost
,
org.jboss.resteasy.jaxrs.client.proxy.port=6969
- 结果:请求未通过代理
- 来源:Quarkus / Restclient with proxy configuration
在应用程序属性中,指定
quarkus.rest-client.proxy-address=http://localhost:6969
,
- 结果:请求未通过代理
- 来源:https://quarkus.io/guides/all-config
在应用程序属性中指定 client/mp-rest/proxyAddress=http://localhost:6969
- 结果:请求未通过代理
传递系统属性的其他方式-Dhttp.proxyHost
和-Dhttp.proxyPort
- 例如通过设置环境变量
JAVA_TOOL_OPTIONS="-Dhttp.proxyHost -Dhttp.proxyPort"
- 结果:请求未通过代理
使用从 quarkus 生成的 Dockerfile.jvm 构建并启动了一个 docker 容器(创建新的 quarkus 项目时包含),然后设置环境变量 HTTP_PROXY=localhost:6969
.
- 它只是打印它传递了
-Dhttp.proxyHost
和 -Dhttp.proxyPort
选项给应用程序(我从一开始就做的)
- 结果:请求未通过代理
系统信息
- OS:Windows 11,但我在 WSL2 (Ubuntu 20.04.3 LTS) 中做所有事情。
- CPU:英特尔酷睿 i7-10850H
Quarkus 带有两个 REST 客户端,旧的 classic version and the newer reactive one。反应式客户端具有代理支持;经典不做广告。尝试切换到反应式客户端。
(从评论中复制)
我想指定我的 Quarkus 应用程序 (v2.8.3.Final) 使用 HTTP 代理 而不更改任何代码
为了尝试这个,我将 -Dhttp.proxyHost
和 -Dhttp.proxyPort
选项传递给终端,如下所示:
./mvnw quarkus:dev -Dquarkus.http.host=0.0.0.0 -Dquarkus.http.port=9000 -Ddebug=9001 -Dhttp.proxyHost=localhost -Dhttp.proxyPort=6969
- 这 适用于 其他基于 Jersey 和 Tomcat 的 Java 应用程序
- 这 也适用于 另一个 Quarkus 应用程序,(在另一点创建,但我确保 Quarkus 版本相同,v2.8。3.Final 在
pom.xml
)
比较工作的 quarkus 应用程序和有问题的应用程序
为了比较工作中的 quarkus 应用程序 (A) 和另一个 (B) 我已经实现了一个发送请求的资源至 http://google.com
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;
.
.
.
@GET
@Path("/google")
@Produces(MediaType.TEXT_PLAIN)
public String google() {
Client client = ClientBuilder.newClient();
return client.target("http://www.google.com")
.request(MediaType.TEXT_PLAIN)
.get()
.readEntity(String.class);
}
并且我已确保 Quarkus 版本相同。这是来自 pom.xml
<properties>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>2.8.3.Final</quarkus.platform.version>
</properties>
Application A 成功将其请求传递给代理服务器,而 B 不会。比较它们的 pom.xml
文件和 application.properties
文件时,这两个应用程序非常相似。我正在努力指出相关差异。我想至少得到一些关于我可以在哪里解决这个问题的指示。
除了通过 -Dhttp.proxyHost
和 -Dhttp.proxyPort
之外我还尝试过的其他事情:
在应用程序属性中,指定
org.jboss.resteasy.jaxrs.client.proxy.host=http://localhost
,org.jboss.resteasy.jaxrs.client.proxy.port=6969
- 结果:请求未通过代理
- 来源:Quarkus / Restclient with proxy configuration
在应用程序属性中,指定
quarkus.rest-client.proxy-address=http://localhost:6969
,- 结果:请求未通过代理
- 来源:https://quarkus.io/guides/all-config
在应用程序属性中指定
client/mp-rest/proxyAddress=http://localhost:6969
- 结果:请求未通过代理
传递系统属性的其他方式
-Dhttp.proxyHost
和-Dhttp.proxyPort
- 例如通过设置环境变量
JAVA_TOOL_OPTIONS="-Dhttp.proxyHost -Dhttp.proxyPort"
- 结果:请求未通过代理
- 例如通过设置环境变量
使用从 quarkus 生成的 Dockerfile.jvm 构建并启动了一个 docker 容器(创建新的 quarkus 项目时包含),然后设置环境变量
HTTP_PROXY=localhost:6969
.- 它只是打印它传递了
-Dhttp.proxyHost
和-Dhttp.proxyPort
选项给应用程序(我从一开始就做的) - 结果:请求未通过代理
- 它只是打印它传递了
系统信息
- OS:Windows 11,但我在 WSL2 (Ubuntu 20.04.3 LTS) 中做所有事情。
- CPU:英特尔酷睿 i7-10850H
Quarkus 带有两个 REST 客户端,旧的 classic version and the newer reactive one。反应式客户端具有代理支持;经典不做广告。尝试切换到反应式客户端。
(从评论中复制)