Android - проблемы с последовательными HttpPosts - PullRequest
0 голосов
/ 11 ноября 2011

Я пишу простой HttpClient в Android, потому что мне нужно делать различные запросы POST подряд. Я сначала делаю HttpGet, а затем первый HttpPost. Я могу получить HTML первого GET и первого POST. Но если я делаю новый GET или новый POST, я получаю пустой ответ. Чтобы прояснить мою проблему, я прилагаю код.

    DefaultHttpClient httpclient = new DefaultHttpClient();

    //FIRST GET TO ACCESS LOGIN MODULE

    try {
        HttpGet httpget = new HttpGet("https://site/link_to_access_the_login_form");

        HttpResponse response = null;
        try {
            response = httpclient.execute(httpget);
        } catch (ClientProtocolException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        HttpEntity entity = response.getEntity();

        System.out.println("Login form get: " + response.getStatusLine());
        entity.consumeContent();


        //FIRST POST TO ACCESS THE RESTRICTED AREA

        HttpPost httpost = new HttpPost("https://site/login/login.do");

        List <NameValuePair> nameValuePairs = new ArrayList <NameValuePair>(6);
        nameValuePairs.add(new BasicNameValuePair("login", "uid"));
        nameValuePairs.add(new BasicNameValuePair("password", "pwd"));
        //additional params


        httpost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));

        try {
            response = httpclient.execute(httpost);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        entity = response.getEntity();

        System.out.println("Login form get: " + response.getStatusLine());
        //entity.consumeContent();

        try {
            String responseTextPost1 = EntityUtils.toString(entity);
            entity.consumeContent();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        //SECOND POST TO ACCESS A LINK IN THE RESTRICTED AREA

        httpost = new HttpPost("https://site/role/script.do");
        List <NameValuePair> nameValuePairs6 = new ArrayList <NameValuePair>(6);
        //Parameters...

        httpost.setEntity(new UrlEncodedFormEntity(nameValuePairs6, HTTP.UTF_8));

        try {
            response = httpclient.execute(httpost);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println("Login form get: " + response.getStatusLine());
        entity = response.getEntity();


        try {
            String responseTextPost2 = EntityUtils.toString(entity);
            entity.consumeContent();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    } catch..............

responseTextPost2 кажется пустым. Предложения по решению этой проблемы?

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

Для потомков ...

Проблема заключается в названии переменных NameValuePairs.Они должны иметь одинаковое имя.Так что оба "nameValuePairs".

Надеюсь, это поможет!

0 голосов
/ 07 января 2014
HttpParams httpParams=new BasicHttpParams();
DefaultHttpClient httpclient = new DefaultHttpClient(httpParams);

//FIRST GET TO ACCESS LOGIN MODULE

try {
    HttpGet httpget = new HttpGet("https://site/link_to_access_the_login_form");

    HttpResponse response = null;
    try {
        response = httpclient.execute(httpget);
    } catch (ClientProtocolException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    HttpEntity entity = response.getEntity();

    System.out.println("Login form get: " + response.getStatusLine());
    entity.consumeContent();


    //FIRST POST TO ACCESS THE RESTRICTED AREA

    HttpPost httpost = new HttpPost("https://site/login/login.do");

    List <NameValuePair> nameValuePairs = new ArrayList <NameValuePair>(6);
    nameValuePairs.add(new BasicNameValuePair("login", "uid"));
    nameValuePairs.add(new BasicNameValuePair("password", "pwd"));
    //additional params


    httpost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));

    try {
        response = httpclient.execute(httpost);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    entity = response.getEntity();

    System.out.println("Login form get: " + response.getStatusLine());
    //entity.consumeContent();

    try {
        String responseTextPost1 = EntityUtils.toString(entity);
        entity.consumeContent();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //SECOND POST TO ACCESS A LINK IN THE RESTRICTED AREA

    httpost = new HttpPost("https://site/role/script.do");
    List <NameValuePair> nameValuePairs6 = new ArrayList <NameValuePair>(6);
    //Parameters...

    httpost.setEntity(new UrlEncodedFormEntity(nameValuePairs6, HTTP.UTF_8));

    try {
        response = httpclient.execute(httpost);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    System.out.println("Login form get: " + response.getStatusLine());
    entity = response.getEntity();


    try {
        String responseTextPost2 = EntityUtils.toString(entity);
        entity.consumeContent();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


} catch..............
...