Apache HttpClient 4.2.1 POST-запрос для заполнения формы после успешного входа в систему

Я пишу приложение, которое может войти на сайт и отправить определенную форму. Я могу успешно войти в систему, но когда я пытаюсь отправить другой запрос POST для отправки другой формы, ничего не происходит.

Это мой код:

    try {
           //log in to site
        HttpPost httpPost = new HttpPost("http://mysite.ru");
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("login", "guest"));
        nvps.add(new BasicNameValuePair("password", "guest"));

        httpPost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));

        HttpResponse response = httpClient.execute(httpPost);

        HttpEntity entity = response.getEntity();
        EntityUtils.consume(entity);

           //all ok. i obtained cookie
        List<Cookie> cookies = httpClient.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            System.out.println("None");
        } else {
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("- " + cookies.get(i).toString());
                ConnectionManager.printLog("- " + cookies.get(i).toString());
            }
        }

            //then trying to fill another form in another page of this site
        httpPost = new HttpPost("http://mysite.ru/?h[0][mode]=controllers&h[0][action]=add&h[1][mode]=controllers");

        List<NameValuePair> nvps2 = new ArrayList<NameValuePair>();
        nvps2.add(new BasicNameValuePair("owner", "0"));
        nvps2.add(new BasicNameValuePair("imei", "123456789123456"));
        nvps2.add(new BasicNameValuePair("password", "asdfghj"));
        nvps2.add(new BasicNameValuePair("type_id", "6"));
        nvps2.add(new BasicNameValuePair("remarks", ""));

        httpPost.setEntity(new UrlEncodedFormEntity(nvps2));

        response = httpClient.execute(httpPost);
           //after filling this form, site must redirect me on another page. 
        entity = response.getEntity();
           //but then I look on page I obtained, it's still the same page with form I tried to fill. 
           //It seems like I didn't post request.
        String pageHTML = EntityUtils.toString(entity);
        System.out.println(pageHTML);

        EntityUtils.consume(entity);

    } finally {
        httpClient.getConnectionManager().shutdown();
    }

Вторая форма не отличается от первой по типу.


person Hipsterella    schedule 05.10.2012    source источник
comment
Попробуйте включить ведение журнала и убедитесь, что ваша форма отправляется должным образом: http://hc.apache.org/httpcomponents-client-ga/logging.html   -  person jt.    schedule 05.10.2012
comment
Большое спасибо ! Такая же проблема и у меня   -  person Sourav Kanta    schedule 27.10.2015


Ответы (1)


Я решил свою проблему. Во второй форме (не в форме входа) была кнопка отправки:

<form method="post">
   <p>...<p>
   <p>...<p>
   <p>...<p>
   <p>...<p>
   <p>...<p>
     <input type="submit" name="apply" value "Save">
</form>

Чтобы заполнить форму, сохранить и перейти на следующую страницу, я должен добавить еще один ValuePair к моему почтовому запросу:

nvps2.add(new BasicNameValuePair("apply", "Save"));

Я не знаю, почему мне не нужно было отправлять такое значение Button для входа в систему, когда я заполнял форму авторизации. Но теперь все работает!

person Hipsterella    schedule 08.10.2012
comment
Большое спасибо ! Сам столкнулся с такой же проблемой. Спасибо еще раз. :) - person Sourav Kanta; 27.10.2015