JSoup не подключает сайт с паролем для входа - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь подключить сайт с помощью JSoup, но не работает.

Вот мой код:

        Connection.Response res = Jsoup.connect("http://www.metalbulletin.com/Login.html?ReturnURL=%2fdefault.aspx&")
        .data("username", "94mkr@mail4gmail.com", "password", "jakdjique&THFI#")
        .method(Method.POST)
        .execute();

        Map<String, String> loginCookies = res.cookies();

        Document doc = Jsoup.connect("https://www.metalbulletin.com/Article/3838710/Home/CHINA-REBAR-Domestic-prices-recover-after-trading-pick-up.html")
        .cookies(loginCookies)
        .get();

        Element article             = doc.getElementById("article-body");   
        Elements heading            = article.getElementsByTag("h1");
        Elements lead               = article.getElementsByClass("lead");
        Elements lead1              = article.getElementsByClass("articleContainer");

        System.out.println(lead);   
        System.out.println(lead1);          

Я только что ввел временный логин / пароль, чтобы вы могли его проверить. Я заметил, что http://www.metalbulletin.com/Login.html?ReturnURL=%2fdefault.aspx& генерирует новую ссылку, например:
https://account.metalbulletin.com/identity/login?signin=fab48076d8a4f74f52565dd6a9f47e65

Я много пробовал, но все еще не смог зайти на этот сайт

ОБНОВЛЕНИЕ
Я уточнил свой код как:

Connection.Response response = Jsoup.connect("http://www.metalbulletin.com/Login.html?ReturnURL=%2fdefault.aspx&")
    .method(Connection.Method.GET)
    .execute();

    response = Jsoup.connect("http://www.metalbulletin.com/Login.html?ReturnURL=%2fdefault.aspx&")
    .data("username", "94mkr@mail4gmail.com", "password", "jakdjique&THFI#")
    .cookies(response.cookies())
    .method(Connection.Method.POST)
    .execute();

    Map<String, String> cookies = new HashMap<String, String>();

    Document doc = Jsoup.connect("https://www.metalbulletin.com/Article/3838710/Home/CHINA-REBAR-Domestic-prices-recover-after-trading-pick-up.html")
    .cookies(response.cookies())
    .get();

    System.out.println(response.statusMessage()+"\n"+response.statusCode());  

Когда я компилирую, вывод:
OK 200
, но когда я продолжаю к следующей части выборки данных, как:

    Element article             = doc.getElementById("article-body");   
    Elements lead               = article.getElementsByClass("lead");
    Elements lead1              = article.getElementsByClass("articleContainer");

    System.out.println(lead);   
    System.out.println(lead1);          

Затем он сдается и показывает данные, которыеотображается для не авторизованных пользователей

1 Ответ

0 голосов
/ 17 октября 2018

Предполагая, что вы хотите просматривать веб-сайт, используя указанные учетные данные, я бы предложил вам войти в систему с обычного браузера.Скопируйте файлы cookie, сгенерированные веб-сайтом, и добавьте их в экземпляр CookieStore.

    BasicCookieStore cookieStore = new BasicCookieStore();

    BasicClientCookie cookie1 = new BasicClientCookie("__gads", "ID=958b183c83ede6e8:T=1539776783:S=ALNI_MbFRRpTafZvTiJAjKmTB9oBQelWWw");
    cookie1 .setDomain(".metalbulletin.com");
    cookie1 .setPath("/");

    BasicClientCookie cookie2 = new BasicClientCookie("__utma", "167598498.350699797.1539776871.1539776871.1539776871.1");
    cookie2 .setDomain(".metalbulletin.com");
    cookie2 .setPath("/");
    ....
    cookieStore.addCookie(cookie1);
    cookieStore.addCookie(cookie2);
    ....

Затем используйте хранилище cookie при создании пула соединений.

    PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
    connManager.setMaxTotal(256);
    connManager.setDefaultMaxPerRoute(64);
    ConnectionKeepAliveStrategy myStrategy = new DefaultConnectionKeepAliveStrategy();
    CloseableHttpClient closeableHttpClient = HttpClientBuilder.create()
            .setDefaultCookieStore(getCookieStore())
            .setDefaultRequestConfig(RequestConfig.custom()
                    .setCookieSpec(CookieSpecs.STANDARD).build())
            .setConnectionManager(connManager).setKeepAliveStrategy(myStrategy).build();

Потому что в любом случае, если вы хотитевойти на сайт.Тогда вам нужен способ обработки файлов cookie и токенов.Таким образом, магазин cookie будет обрабатывать файлы cookie.Вам просто нужно позвонить на веб-сайт с помощью http-клиента и проанализировать возвращенный HTML-файл с помощью jsoup.

Редактировать : выполните следующие действия:

  1. Войдите в систему, используя ваш браузер.
  2. Создайте BasicCookieStore, который содержит все файлы cookie, сохраненные браузером.Вы можете использовать консоль разработчика и отслеживать, какие cookie-файлы меняются каждый раз, когда вы перемещаетесь по сайту, и таким образом выяснять наиболее важные из них.Но, чтобы остаться в безопасности, добавьте их все.
  3. Создайте HttpClientManager и добавьте в него cookieStore.
  4. Теперь вы можете войти в систему и начать вызывать страницы, которые нужно почистить.Просто сделайте запрос get, используя сгенерированный вами пул клиентов.например: на страницу "https://www.metalbulletin.com/Article/3838710/Home/CHINA-REBAR-Domestic-prices-recover-after-trading-pick-up.html"
  5. Если все сделано правильно, запрос должен вернуть источник HTML-страницы.
  6. Используйте Jsoup.parse (stringHtml) для преобразования строкового ответа в объект Document..
  7. Разобрать ответ и извлечь нужные элементы.
  8. Сделать еще один запрос .. получить ответ в виде строки .. Разобрать html с jsoup .. repeat.

Удачи.

...