gpt4 book ai didi

java - Google Cloud Java 客户端 : forcing HTTP when setting a custom endpoint

转载 作者:行者123 更新时间:2023-12-02 11:32:53 28 4
gpt4 key购买 nike

我正在使用 Google 的 LanguageServiceClient来自com.google.cloud:google-cloud-vision:1.16.0 ,和ImageAnnotatorClient来自com.google.cloud:google-cloud-language:1.16.0 .

它们用于在私有(private) VPN 内运行的项目。公司的基础设施规定访问外部服务必须通过转发代理来完成。此外,VPN 中的所有转发代理都必须使用 HTTP,而不是 HTTPS。

所以我有一个转发代理 xx.xx.xx.xx,以及像 http://xx.xx.xx.xx/somePath 这样的所有请求转发至https://language.googleapis.com/somePath 。我用一些curl请求对此进行了测试,它们工作正常。

我已更改端点如下:

LanguageServiceSettings serviceSettings = LanguageServiceSettings.newBuilder()
.setEndpoint("xx.xx.xx.xx:80")
//the default value of this is "language.googleapis.com:443"
.build();
languageServiceClient = LanguageServiceClient.create(serviceSettings);

但是,客户端似乎是通过 HTTPS 访问新端点。我不知道如何设置该方案。任何帮助将不胜感激。

最佳答案

事实证明,即使在 HTTPS 上获取转发代理也不起作用,因为库会在发现 SSL 证书域 (language.googleapis.com) 与请求 URL(转发代理 IP)不匹配时拒绝请求。

相反,我坚持使用 HTTP 代理并使其按如下方式工作:

HttpHost proxy = new HttpHost("xx.xx.xx.xx", 80);

HttpTransportFactory transportFactory = () -> new ApacheHttpTransport.Builder()
.setProxy(proxy)
.build();

CredentialsProvider credentialsProvider = () -> GoogleCredentials.getApplicationDefault(transportFactory);

LanguageServiceSettings serviceSettings = LanguageServiceSettings.newBuilder()
.setCredentialsProvider(credentialsProvider)
.build();

LanguageServiceClient languageServiceClient = LanguageServiceClient.create(serviceSettings);

这会处理身份验证步骤,但是,实际请求仍在向 language.googleapis.com 发出。

这不能被类似地覆盖,因为请求是使用 GRPC 而不是 Google Http 发出的。据我所知,GRPC 没有任何在代码中设置代理的规定。解决此问题的一种方法是设置此环境变量:

export GRPC_PROXY_EXP=xx.xx.xx.xx:80

注意事项:

  • GRPC_PROXY_EXP 变量将影响应用程序中使用 GRPC 的所有请求。
  • 您的代理必须支持CONNECT请求以使 GRPC_PROXY_EXP 变量发挥作用
  • 在撰写本答案时,google-cloud-vision/language 的版本为 1.20.0,并使用 GRPC 版本 1.9.0。此版本的 GRPC 有一个错误,导致 GRPC_PROXY_EXP 无法正常工作。 1.10.0版本也有同样的bug。唯一有效的版本是 1.9.1。 您必须检查 google 云库的所有依赖项,并且对于您找到的每个 io.grpc:*:1.9.0 包,将该包的 1.9.1 版本的依赖项添加到您的项目中。

关于java - Google Cloud Java 客户端 : forcing HTTP when setting a custom endpoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49167306/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com