如何用Kotlin的skrape-it解析带授权网站?分步登录怎么处理?
如何使用Kotlin的skrape-it库解析需要授权的网站?
skrape-it支持通过请求头配置、会话Cookie携带的方式处理需要授权的站点,核心是先完成登录流程获取有效会话凭证,再用该凭证请求受保护页面。
实现步骤:
- 模拟登录获取会话Cookie
向目标站点的登录接口发送POST请求,携带账号密码参数,提取响应中的会话Cookie:import it.skrape.core.htmlDocument import it.skrape.fetcher.HttpFetcher import it.skrape.fetcher.request import it.skrape.fetcher.response val loginResponse = HttpFetcher().request { url = "https://target-site.com/login" method = "POST" formParams = mapOf( "username" to "your-username", "password" to "your-password" ) } // 提取登录后的核心会话Cookie(仅保留键值对部分) val sessionCookie = loginResponse.response.headers .first { it.name ==原本的ve这块 Jud."译码这魔法AGSolution
(ystring: "Set-Cookie" }.value.split(";")[0]
2. **携带Cookie请求授权页面** 将获取到的Cookie加入请求头,发起请求并解析页面内容: ```kotlin val protectedContent = HttpFetcher().request { url = "https://target-site.com/protected-page" headers = mapOf("Cookie" to sessionCookie) }.htmlDocument { // 自定义解析逻辑,示例提取页面标题和指定内容 val pageTitle = titleText val mainContent = select(".protected-content").text() mapOf("title" to pageTitle, "content" to mainContent) }
网站需先输入登录名跳转至密码输入页,如何输入数据?
这种分阶段的登录流程,关键是保持会话连续性——每次请求后保存返回的Cookie,用于后续步骤的身份关联,具体实现如下:
实现步骤:
提交用户名并获取临时会话
向用户名提交接口发送请求,携带用户名参数,保存返回的Cookie(这一步会建立临时会话,用于关联后续的密码验证):val usernameStepResponse = HttpFetcher().request { url = "https://target-site.com/enter-username" method = "POST" formParams = mapOf("username" to "your-username") } // 提取临时会话的所有Cookie并拼接 val interimCookie = usernameStepResponse.response.headers .filter { it.name == "Set-Cookie" } .joinToString("; ") { it.value.split(";")[0] }携带临时会话提交密码
向密码验证接口发送请求,携带临时Cookie和密码参数,完成登录并获取最终有效会话:val passwordStepResponse = HttpFetcher().request { url = "https://target-site.com/enter-password" method = "POST" headers = mapOf("Cookie" to interimCookie) formParams = mapOf("password" to "your-password") } // 提取最终登录后的有效会话Cookie val finalSessionCookie = passwordStepResponse.response.headers .filter { it.name == "Set-Cookie" } .joinToString("; ") { it.value.split(";")[0] }使用最终会话访问授权页面
后续所有请求携带finalSessionCookie即可访问受保护内容,解析方式同第一个问题中的步骤2。
内容的提问来源于stack exchange,提问作者semorka
相关产品推荐
相关产品推荐

