Apache HttpClient 3, многопоточный с разными учетными данными для каждого запроса? - PullRequest
0 голосов
/ 17 октября 2011

Как получить конкретные учетные данные для каждого запроса на HttpClient? Проблема в том, что у меня сейчас есть 2-й поток, кажется, заменить предыдущие учетные данные 1-го потока.

Ниже приведен пример кода:

    class GetThread extends Thread {
    HttpClient httpClient;

    private String username,password;

    public GetThread(HttpClient httpClient,String username,String password) {
        this.httpClient = httpClient;
        this.username= username;
        this.password= password;
    }

    public void run() {

        Credentials defaultcreds = new UsernamePasswordCredentials(username, password);
        httpClient.getState().setCredentials(new AuthScope("dummyhost", 80, AuthScope.ANY_REALM), defaultcreds);
        HttpMethod method = new GetMethod("http://dummyhost/RSL/servlets/dv.data");

        method.setDoAuthentication(true);
        try {
            httpClient.executeMethod(method);

            byte[] responseBody = method.getResponseBody();
            System.out.println(Thread.currentThread().getName()+" "+username+" "+new String(responseBody));

        } catch (Exception e) {
            e.printStackTrace();
        } 
         finally {
             method.releaseConnection();
         }

    }
}

И вот что я положил в свой основной класс:

    MultiThreadedHttpConnectionManager connectionManager = 
        new MultiThreadedHttpConnectionManager();

    HttpClient httpClient = new HttpClient(connectionManager);
    GetThread getThread[] = {new GetThread(httpClient, "rsbatch1", "test1234"),
            new GetThread(httpClient, "rsbatch12", "test1234")};

    for(int i=0;i<getThread.length;i++)
    {
        getThread[i].start();
    }

1 Ответ

0 голосов
/ 17 октября 2011

Если вы хотите иметь отдельные учетные данные для каждого потока, то вам также нужно иметь отдельный клиент для каждого потока - у каждого клиента есть 1 набор учетных данных.

Измените конструктор для GetThread на

public GetThread(HttpConnectionManager connectionManager,String username,String password) {
    this.httpClient = new HttpClient(connectionManager);
    this.username= username;
    this.password= password;
}

и это должно делать то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...