簡體   English   中英

jsoup登錄並解析html

[英]jsoup login and parse html

問題是:當我登錄網站時,它每次都指向主頁。 但是我想連接不同的頁面來解析它的html並從中下載,所以上次連接中的文檔指示再次登錄

try {
            
            Connection.Response response = Jsoup.connect("https://10.232.1.220/123Mobile/Portal/")
                    .userAgent(USER_AGENT)
                    .sslSocketFactory(utilService.socketFactory())
                    .method(Connection.Method.GET)
                    .execute();

            //Login 
            
            FormElement loginForm = (FormElement)response.parse().select("form[class=login-form]").first();
            checkElement("Login Form", loginForm);
            Element loginField = loginForm.select("input[name=UserName]").first();
            checkElement("Login Field", loginField);
            loginField.val(internalConstant.getEbcUsename());
            Element passwordField = loginForm.select("input[name=Password]").first();
            checkElement("Password Field", passwordField);
            passwordField.val(internalConstant.getEbcPassword());
            response = loginForm.submit()
                     .cookies(response.cookies())
                     .userAgent(USER_AGENT)  
                     .method(Method.POST)
                     .sslSocketFactory(utilService.socketFactory())
                     .followRedirects(false)
                     .execute();
            
            logger.info("home html: " + response.parse());
            //target document
            
            Document targetPage = Jsoup.connect("https://10.232.1.220/123Mobile/Portal/Reports/TransactionReport")
                    .userAgent(USER_AGENT)
                    .sslSocketFactory(utilService.socketFactory())
                    .cookies(response.cookies())
                    .get();
            
            logger.info("target document html: " + targetPage.html());

            if (ebcFile.isEmpty()) {
                logger.error("file not found");

                throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Ebc File not found in website");
            }

            // this.FileDownloaderService.downloadExcelFile(ebcFile);
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("download error " + e.getMessage());
            throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Failed to download file");
        }

問題是提交 cookie 的響應沒有 sessionid 和請求令牌 cookie,所以我從登錄響應中添加了它們。

Connection.Response response = Jsoup.connect(internalConstant.getLoginURL())
                    .userAgent(USER_AGENT)
                    .sslSocketFactory(utilService.socketFactory())
                    .method(Connection.Method.GET)
                    .execute();
            
            logger.info("response cookies after parse login page: " + response.cookies());
            String sesionID = response.cookie(your cookie);
            String requestCookie = response.cookie(your cookie);

            //Login 
            
            FormElement loginForm = (FormElement)response.parse().select("form[class=login-form]").first();
            checkElement("Login Form", loginForm);
            Element loginField = loginForm.select("input[name=UserName]").first();
            checkElement("Login Field", loginField);
            loginField.val(internalConstant.getEbcUsename());
            
            Element passwordField = loginForm.select("input[name=Password]").first();
            checkElement("Password Field", passwordField);
            passwordField.val(internalConstant.getEbcPassword());
            response = loginForm.submit()
                     .cookies(response.cookies())
                     .userAgent(USER_AGENT)  
                     .method(Method.POST)
                     .sslSocketFactory(utilService.socketFactory())
                     .execute();
            Map<String , String> coky = response.cookies();
            coky.put("your cookie", requestCookie);
            coky.put("your cookie", sesionID);
            
            logger.info("response cookies after submit: " + coky);
            
            
            //target document
            
             response = Jsoup.connect(internalConstant.getURL())
                    .userAgent(USER_AGENT)
                    .sslSocketFactory(utilService.socketFactory())
                    .cookies(coky)
                    .method(Method.GET)
                    .execute();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM