You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Kotlin的skrape-it解析带授权网站?分步登录怎么处理?

如何使用Kotlin的skrape-it库解析需要授权的网站?

skrape-it支持通过请求头配置、会话Cookie携带的方式处理需要授权的站点,核心是先完成登录流程获取有效会话凭证,再用该凭证请求受保护页面。

实现步骤:

  1. 模拟登录获取会话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,用于后续步骤的身份关联,具体实现如下:

实现步骤:

  1. 提交用户名并获取临时会话
    向用户名提交接口发送请求,携带用户名参数,保存返回的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] }
    
  2. 携带临时会话提交密码
    向密码验证接口发送请求,携带临时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] }
    
  3. 使用最终会话访问授权页面
    后续所有请求携带finalSessionCookie即可访问受保护内容,解析方式同第一个问题中的步骤2。


内容的提问来源于stack exchange,提问作者semorka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:32:47