Android DefaultHTTPClient заполняет форму по запросу Post на веб-сайте, управляемом javascript - PullRequest
2 голосов
/ 02 июня 2011

Моя проблема похожа на эту: POST HTTPclient с проблемным веб-сайтом

Я использовал данные тампера, чтобы найти все запросы, проходящие через клиент и сервер.

Сначала я выполнил запрос get, чтобы загрузить страницу и получить динамически сгенерированные значения полей.Затем я создал список пар именованных значений для всех полей ввода соответствующей формы и выполнил post req, однако он перенаправил меня на страницу с ошибкой.

Я попытался установить cookie и обработать sslfactory всеми возможными способамиon stackoverflow:

но это не работает для меня.

Я не знаю, в чем проблема, я даже не получаю никаких ошибок в журналах.Я потратил пару дней на эту единственную проблему.

1 Ответ

3 голосов
/ 30 августа 2011

В решении использовался тот же HttpClient без необходимости сохранения файлов cookie или чего-либо еще.Сначала найдите все запросы (получить или опубликовать), сделанные с использованием данных тампера.Затем извлеките динамически сгенерированные значения скрытого поля:

public static String getPage(String sURL) throws HttpException {
    HttpGet method = new HttpGet(sURL);

    // method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
    // new DefaultHttpMethodRetryHandler(3, false));

    try {
        /*
        * int statusCode = client.execute(method); if (statusCode !=
        * HttpStatus.SC_OK) { System.err.println("Method failed: " +
        * method.getStatusLine()); }
        */HttpResponse res;
        res = client.execute(method);

        BasicResponseHandler myHandler = new BasicResponseHandler();
        String content = myHandler.handleResponse(res);
        //extract dynamic parameters here
        return content;
    } catch(...) {

    }
}

Затем для публикации используйте этот метод:

public static String postPage1(list of parameters to be passed in the post form) throws HttpException {
    BasicNameValuePair[] data = {
        new BasicNameValuePair("field name", "param1"),
        ......
    };
    HttpPost post = new HttpPost(sURL);

    // post.setRequestBody(data);
    try {
        post.setEntity(new UrlEncodedFormEntity(Arrays.asList(data)));

        HttpResponse res;
        res = client.execute(post);
        int statusCode;

        BasicResponseHandler myHandler = new BasicResponseHandler();
        String content = myHandler.handleResponse(res);
        return content;
    } catch (...) {

    }
}

Вот и все.

...