将代理与适用于 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 的 Google API 客户端库时更改批量 HTTP 请求的 READ TIMEOUT