繁体   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