проверка javascript на стороне сервера не проходит автоматически при входе в систему - PullRequest
0 голосов
/ 06 марта 2012

Разрабатывая свое первое приложение для Android, я думаю, что столкнулся с проблемой.

Мое приложение предназначено для автоматического входа на веб-сайт и запроса на сайте некоторых поисковых терминов и отображения результатов.на экране.Я специально не хочу использовать браузер, поскольку мне нравится избавляться от большинства накладных расходов сайта (изображений, рекламы и т. Д.).

Использование входа в систему на основе форм с помощью HttpURLConnection Я являюсьзастрял в точке, где сервер подтверждает мой вход в систему, но затем проверяет JavaScript и возможности моего браузера и останавливает вход в систему.Сервер возвращается с аккуратно созданной страницей, на которой написано что-то вроде «Эй, спасибо за вход в систему, но вам нужно включить javascript и cookie, до свидания», так что это не ошибка HTTP или соединения или что-то подобное.

Соответствующий код:

        InputStream myInputStream =null;
        StringBuilder sb = new StringBuilder();

        // prepare login fields
        sb.append("username=");    
        sb.append(username);           
        sb.append("&password=");   
        sb.append(password);

        myurl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) myurl.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

        // add the POST form fields to the request
        wr.write(sb.toString());
        wr.flush();
        myInputStream = conn.getInputStream();
        wr.close();

Я могу вызвать такое же поведение сервера с Lynx (консольный браузер для Linux, в котором также нет javascript), который дает мне ту же страницу, что я не могу использовать сайт, пока явключите javascript в моем браузере.

В идеале я хотел бы просто обмануть сервер и сообщить ему, что у меня есть поддержка javascript, но я не знаю, возможно ли это с моим текущим методом.

Если это не сработает, каковы мои альтернативы?Должен ли я использовать что-то вроде WebViewClient?Как уже говорилось, мне не нужен графический интерфейс браузера, просто способ извлечь данные из html и сделать что-то с ними в моем приложении.

Заранее спасибо!

1 Ответ

0 голосов
/ 06 марта 2012

Веб-сервер может проверять ваш заголовок User-agent и сравнивать его с белым списком поддерживаемых браузеров. Попробуйте сделать это перед отправкой запроса:

conn.setRequestProperty(
    "User-agent", 
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...