Исключение при использовании HttpClient для выполнения GET после POST - PullRequest
3 голосов
/ 15 января 2011

Я использую Apache DefaultHttpClient() с методом execute(HttpPost post) для создания HTTP POST. С этим я захожу на сайт. Тогда я хочу использовать тот же клиент, чтобы сделать HttpGet. Но когда я это делаю, я получаю исключение:

Исключение в потоке "main" java.lang.IllegalStateException: недопустимое использование SingleClientConnManager: соединение все еще выделено.

Я не уверен, почему это происходит. Любая помощь будет оценена.

public static void main(String[] args) throws Exception {

    // prepare post method
    HttpPost post = new HttpPost("http://epaper02.niedersachsen.com/epaper/index_GT_neu.html");

    // add parameters to the post method
    List <NameValuePair> parameters = new ArrayList <NameValuePair>();
    parameters.add(new BasicNameValuePair("username", "test"));
    parameters.add(new BasicNameValuePair("passwort", "test")); 

    UrlEncodedFormEntity sendentity = new UrlEncodedFormEntity(parameters, HTTP.UTF_8);
    post.setEntity(sendentity); 

    // create the client and execute the post method
    HttpClient client = new DefaultHttpClient();
    HttpResponse postResponse = client.execute(post);
    //Use same client to make GET (This is where exception occurs)
    HttpGet httpget = new HttpGet(PDF_URL);
    HttpContext context = new BasicHttpContext();

    HttpResponse getResponse = client.execute(httpget, context);



    // retrieve the output and display it in console
    System.out.print(convertInputStreamToString(postResponse.getEntity().getContent()));
    client.getConnectionManager().shutdown();


}

1 Ответ

2 голосов
/ 15 января 2011

Это потому, что после POST менеджер соединений все еще удерживает соединение с ответом POST.Вам нужно сделать так, чтобы вы могли использовать клиент для чего-то другого.

Это должно сработать:

HttpResponse postResponse = client.execute(post);
EntityUtils.consume(postResponse.getEntity();

Затем вы можете выполнить GET.

...