2011-05-23 57 views
4

被配置在的Apache HTTP客戶端(x,在後繼公地HTTP 3.X),上HttpClient方法:的Apache HTTP 4.x的:如何可以在 「默認上下文」 上的HttpClient

HttpClient.execute(HttpUriRequest request) 

JavaDoc中的狀態:

「使用默認上下文執行請求」。

  • 什麼是默認情況下(指的是一個HttpContext對象)?
  • 如何配置默認上下文,以便在每次撥打​​時不需要傳遞它? (我不控制呼叫執行(),但我控制創建HttpClient)

回答

5

默認上下文由您正在使用的HttpClient實現進行配置。對於基於AbstractHttpClient的實現,該工作由createHttpContext()方法完成。請注意,每個execute呼叫都會創建一個新的默認上下文。

自己配置默認上下文的一種方法是擴展現有的HttpClient實現類之一併覆蓋該方法。

另一種方法是設置該方法使用的各種參數;例如連接管理器的方案註冊表,authScheme註冊表,cookieSpecs註冊表,cookie存儲或憑證提供程序。

爲了記錄在案,這裏的DefaultHttpClient.createHttpContext()做什麼:

@Override 
protected HttpContext createHttpContext() { 
    HttpContext context = new BasicHttpContext(); 
    context.setAttribute(
     ClientContext.SCHEME_REGISTRY, 
     getConnectionManager().getSchemeRegistry()); 
    context.setAttribute(
     ClientContext.AUTHSCHEME_REGISTRY, 
     getAuthSchemes()); 
    context.setAttribute(
     ClientContext.COOKIESPEC_REGISTRY, 
     getCookieSpecs()); 
    context.setAttribute(
     ClientContext.COOKIE_STORE, 
     getCookieStore()); 
    context.setAttribute(
     ClientContext.CREDS_PROVIDER, 
     getCredentialsProvider()); 
    return context; 
} 
1

從源代碼尋找AbstractHttpClient創建默認HttpContext,您可以通過在設置屬性控制,它與創造的價值例如,通過調用setCredentialsProvider(CredentialsProvider credsProvider)來調用實例HttpClient。是否有任何特定的屬性,你正在尋找配置?

+0

我試圖默認AUTH_CACHE,以便所有請求預先授權basic-auth標頭(因爲這是一個僅通過https連接到已知服務器的REST客戶端): localcontext.setAttribute(ClientContext.AUTH_CACHE,authCache) ; 我沒有看到有沒有設置我自己的默認上下文的權利? – 2011-05-23 13:20:29

+0

你是對的,我沒有看到任何其他的方式去做你需要的。 @Stephen C建議子類化現有的'HttpClient'實現將是當前API的唯一途徑。 – laz 2011-05-23 14:22:03

相關問題