прочитать веб-страницу программно и извлечь некоторую информацию

Я хочу программно получить доступ к веб-странице и извлечь из нее некоторую информацию.

Я хочу войти на какой-нибудь веб-сайт с помощью кода Java и заставить сервер почувствовать, что запрос на самом деле исходит от реального браузера.

Я почти там, хотя есть одна проблема: веб-сайт требует передачи parameter - "sessid" с каждым запросом, который продолжает меняться с каждым запросом.

Например, когда я впервые обращаюсь к странице, sessid=90334 и на следующей странице это похоже на sessid=78204.

Поэтому проход url I должен содержать значение sessid, в противном случае аутентификация завершится ошибкой: www.somesite.com/somepage.php?sessid=75749.

Веб-страница содержит один тег <input>, который содержит значение sessid, и мне нужно получить значение этого тега.

Как я могу это сделать? Тег такой:

<input type="hidden" name="sessid" value="69529">

Я могу успешно прочитать всю веб-страницу, используя следующий код:

   BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

    StringBuilder response = new StringBuilder();
    String line;
    while ((line = rd.readLine()) != null) {
        response.append(line);
    }

person android_newbie    schedule 15.11.2012    source источник
comment
Будет ли более подходящим использовать http://hc.apache.org/httpcomponents-client-ga/httpclient/   -  person Jayan    schedule 15.11.2012


Ответы (1)


Вы можете использовать метод indexOf класса StringBuilder:

    String startInputFragment = "<input type=\"hidden\" name=\"sessid\" value=\"";
    int startIdx = response.indexOf(startInputFragment);
    if (startIdx >= 0) {
        int endIdx = response.indexOf("\">", startIdx);
        String val = response.substring(startIdx + startInputFragment.length(),
                endIdx);
        System.out.println("-->" + val + "<--");
    } else {
        //tag not found: you may throw an ex or do something else
    }
person Tony Rad    schedule 15.11.2012