将代理与适用于 Java 的 Google HTTP 客户端库一起使用

Posted

技术标签:

【中文标题】将代理与适用于 Java 的 Google HTTP 客户端库一起使用【英文标题】:Using proxies with Google HTTP Client Library for Java 【发布时间】:2012-12-25 02:40:55 【问题描述】:

我使用 Google HTTP Client Library for Java 发出简单的 JSON 请求并解析响应。当我不通过代理时,它运行良好。但现在我想允许我的用户在我的应用程序中使用代理(带身份验证)功能。我查看了 HttpTransport、HttpRequestFactory 和 HttpRequestInitializer 类,但没有成功。

到目前为止,我只是稍微修改了示例(主要是删除了不必要的代码)。那么我应该在代码的哪里添加代理设置呢?

static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
static final JsonFactory JSON_FACTORY = new JacksonFactory();

<T> T get(String url, Class<T> type) throws IOException 
    HttpRequestFactory requestFactory =
            HTTP_TRANSPORT.createRequestFactory(new HttpRequestInitializer() 
                @Override
                public void initialize(HttpRequest request) 

                    request.setParser(new JsonObjectParser(JSON_FACTORY));
                
            );
    HttpRequest request = requestFactory.buildGetRequest(new GenericUrl(url));
    return request.execute().parseAs(type);

【问题讨论】:

NetHttpTransport 似乎是内置 java.net HTTP 客户端的包装器......所以我猜你可以使用内置的系统属性来配置代理,如 here 所讨论的那样跨度> 嗯...这很烦人。我希望他们以完全隐藏的方式使用其他库,而不是它的某些组件是可见的。然后我可能会切换到 Apache 实现。 实际上,使用 Apache 或 java.net 都不可能到达那里,因为封装不关心设置代理身份验证。我会提交一张票。 【参考方案1】:

对于使用 google-http-client:1.13.1-beta 的经过身份验证的代理,这似乎工作得很好

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_HOST, PROXY_PORT));
HttpTransport httpTransport = new NetHttpTransport.Builder().setProxy(proxy).build();

这还不足以满足您的需求吗?

【讨论】:

否:我需要输入用户名和密码才能通过。这个 sn-p 没有给出那个选项,抱歉。另外,这段代码是我在我的两个第一个 cmets 之间尝试的。 所以您需要使用登录系统以外的凭据? 是的,我的系统和代理上的凭据不同。 好的,把你提交的票指向我,这样我也可以支持它。 你在这里:code.google.com/p/google-http-java-client/issues/detail?id=190

以上是关于将代理与适用于 Java 的 Google HTTP 客户端库一起使用的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Flutter 的 Google 移动广告 SDK 正式版现已发布

如何将 Amazon Cognito 与适用于 Android 的 Google Plus 集成?

java代理模式与装饰者模式

在使用适用于 Java 的 Google API 客户端库时更改批量 HTTP 请求的 READ TIMEOUT

适用于 Android 的 Google 登录 - 发布与调试

Azure api OAuth2 隐式流适用于 http 但不适用于 htt