2013-01-10 107 views
4

我使用Google HTTP Client Library for Java來製作簡單的JSON請求並解析響應。當我沒有通過代理時,它運行良好。但是現在我想允許我的用戶在我的應用程序中使用代理(具有身份驗證)功能。我查看了HttpTransport,HttpRequestFactory和HttpRequestInitializer類沒有任何成功。將代理與Google HTTP Client Client Library結合使用

到目前爲止,我只是稍微修改了一些例子(主要是刪除不必要的代碼)。那麼我在代碼中添加代理設置?

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); 
} 
+0

NetHttpTransport似乎是內置於'java.net' HTTP客戶端的封裝器...所以我猜測你可以使用內置的系統屬性來配置代理,如[討論] [http:// docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html) – Charlie

+0

嗯......這很煩人。我本來希望他們以完全隱藏的方式使用其他庫,而不是它的某些組件是可見的。然後我可能會切換到Apache實現。 –

+0

實際上,使用Apache或'java.net'是不可能的,因爲封裝並不關心設置代理身份驗證。我會提交一張票。 –

回答

5

這似乎只是正常工作使用谷歌-HTTP客戶端的認證代理:1.13.1-β

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

這不是足以滿足您的需求?

+0

否:我需要輸入用戶名和密碼才能通過。這段代碼不會給出這個選項,對不起。另外,這個代碼是我在我的兩個關於我的問題的第一條評論之間嘗試的。 –

+0

因此,您需要使用不同於您登錄系統的憑證? – William

+0

是的,我的憑證在我的系統和我的代理上不同。 –

相關問題