簡體   English   中英

我是否需要做一些特殊的事情來重新初始化org.apache.http.client.HttpClient

[英]Do I need to do anything special to re-init org.apache.http.client.HttpClient

我有一些代碼:

public class Foo {
    private HttpClient httpClient;
    public Foo() {
        httpClient = new DefaultHttpClient();
    }
}

在與同事(經驗豐富的同事)聊天時,出現了一個擔憂,即如果我創建多個foo(),則他們的httpClient可能都受到一個httpClient動作的影響。 我們特別關注的是Cookies。

如果我有類似的代碼:

public class Bar {
    public static void main(String[] args) {
        Foo a = new Foo();
        Foo b = new Foo();
        a.executeHttpStuff();
    }
}

...並且executeHttpStuff()利用httpClient,並向其中添加了cookie,這些cookie是否會出現在b上的任何調用中?

我的直覺是“不”。

我的同事的直覺是“可能”。

JavaDoc並不是很講究。

你們知道嗎?

根據以下文檔頁面:

http://hc.apache.org/httpclient-3.x/performance.html

“與諸如線程安全的連接管理器(例如MultiThreadedHttpConnectionManager)一起使用時,HttpClient是完全線程安全的”

Javadoc位於:

http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/MultiThreadedHttpConnectionManager.html

HttpClient不會在實例之間共享cookie(通過靜態)。 所以你的預感是對的。

您可以自己嘗試,嗅探從兩個不同客戶端實例到同一服務器的流量(例如通過tcpmon)。

答案是不。 除了您要小心並擁有一個CookieStore。 請參閱: https//hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html

玩得開心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM