我使用的是谷歌的LanguageServiceClient ( com.google.cloud:google-cloud-vision:1.16.0 )和ImageAnnotatorClient ( com.google.cloud:google-cloud-language:1.16.0 )。
它们用于在私有VPN中运行的项目。该公司的基础设施规定,访问外部服务必须通过转发代理完成。此外,VPN中的所有正向代理都必须在HTTP上,而不是HTTPS上。
所以我有一个前向代理xx.xx,所有像http://xx.xx.xx.xx/somePath这样的请求都被转发到https://language.googleapis.com/somePath。我用一些卷曲请求测试了这一点,它们的工作方式是正确的。
我已将端点更改如下:
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到达新的端点。我想不出该怎么制定这个计划。任何帮助都将不胜感激。
发布于 2018-03-12 12:44:15
事实证明,即使在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发出的。据我所知,GRPC没有在代码中设置代理的任何规定。一种方法是设置这个环境变量:
export GRPC_PROXY_EXP=xx.xx.xx.xx:80注意事项:
https://stackoverflow.com/questions/49167306
复制相似问题