【问题标题】:Using proxies with Google HTTP Client Library for Java将代理与适用于 Java 的 Google HTTP 客户端库一起使用
【发布时间】: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 都不可能到达那里,因为封装不关心设置代理身份验证。我会提交一张票。

标签: java http-proxy google-http-client


【解决方案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 之间尝试的。
  • 所以您需要使用登录系统以外的凭据?
  • 是的,我的系统和代理上的凭据不同。
  • 好的,把你提交的票指向我,这样我也可以支持它。
猜你喜欢
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
相关资源
最近更新 更多