Нужно ли делать что-то особенное, чтобы повторно инициировать org.apache.http.client.HttpClient - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть некоторый код:

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

Во время чата с коллегой (с опытом работы выше, чем у меня) возникла проблема, что если я создам несколько foo ()s, что на их httpClient могут повлиять действия одного httpClient.В частности, нас интересуют файлы cookie.

Если у меня есть такой код:

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 не очень-то говорит.

Кто-нибудь из вас, ребята, знает?

Ответы [ 3 ]

2 голосов
/ 07 декабря 2011

HttpClient не делит куки между экземплярами (через статические).Так что ваша догадка верна.

Вы можете попробовать это сами, перехватывая трафик с двух разных экземпляров клиента на один и тот же сервер (например, через tcpmon).

2 голосов
/ 07 декабря 2011

На следующей странице документации:

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

"HttpClient полностью поточно-ориентирован при использовании с потоковым диспетчером соединений, таким как MultiThreadedHttpConnectionManager"

Javadoc находится по адресу:

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

1 голос
/ 07 декабря 2011

Ответ - нет.За исключением того, что вы заботитесь и имеете CookieStore.Смотри: https://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html

Веселись.

...