2011-01-15 2 views
3

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

Исключение в нити «основной» java.lang.IllegalStateException: Invalid использование 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(); 


} 
+0

см. Http://stackoverflow.com/questions/4612573/exception-using-httprequest-execute-invalid-use-of-singleclientconnmanager-co –

ответ

2

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

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

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

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

+0

Спасибо большое! Это сделало это для Исключения! – tzippy

+1

Что такое EntityUtils.consume? Не удается разрешить такой метод. –

Смежные вопросы