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

如何用UnityWebRequest向网站输入框提交授权数据并获取跳转页内容

解决方案步骤

1. 先分析目标登录表单的关键信息

打开目标登录页面,按F12打开开发者工具切换到Network标签,手动完成一次登录,查看登录请求的核心信息:

  • 请求URL:表单action属性对应的完整地址(如果是相对路径,要拼接成绝对URL)
  • 请求方法:绝大多数是POST
  • 请求参数:除了_username、_password,重点检查是否有隐藏字段(比如csrf_token、_token这类动态验证字段)
  • Content-Type:通常为application/x-www-form-urlencoded,少数场景是multipart/form-data

2. 先GET登录页面,提取动态验证字段

多数网站会在登录页面生成动态令牌(比如CSRF),必须携带该字段才能提交登录请求,所以第一步要先抓取登录页面HTML,解析出这些必要字段。

示例代码:

IEnumerator GetLoginPageAndExtractToken(string loginPageUrl, Action<string> onTokenExtracted)
{
    using (UnityWebRequest webRequest = UnityWebRequest.Get(loginPageUrl))
    {
        // 模拟浏览器UA,避免被网站拦截
        webRequest.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");
        
        yield return webRequest.SendWebRequest();

        if (webRequest.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError("获取登录页面失败: " + webRequest.error);
            onTokenExtracted(null);
            yield break;
        }

        // 解析HTML提取动态令牌(需根据实际页面的字段名调整正则)
        string htmlContent = webRequest.downloadHandler.text;
        // 示例:匹配<input type="hidden" name="csrf_token" value="xxx">中的value值
        System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(htmlContent, @"<input type=""hidden"" name=""csrf_token"" value=""([^""]+)""");
        string csrfToken = match.Success ? match.Groups[1].Value : null;

        onTokenExtracted(csrfToken);
    }
}

3. 构造POST请求提交登录表单

拿到所有必要参数后,打包成表单数据发送POST请求,开启自动重定向即可直接获取跳转后的页面内容。

示例代码:

IEnumerator SubmitLogin(string loginPostUrl, string username, string password, string csrfToken)
{
    // 构造表单数据
    WWWForm form = new WWWForm();
    form.AddField("_username", username);
    form.AddField("_password", password);
    if (!string.IsNullOrEmpty(csrfToken))
    {
        form.AddField("csrf_token", csrfToken); // 替换成实际的隐藏字段名
    }
    // 如有其他固定字段(比如表单标识),一并添加
    // form.AddField("login_form", "1");

    using (UnityWebRequest webRequest = UnityWebRequest.Post(loginPostUrl, form))
    {
        // 模拟浏览器UA
        webRequest.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");
        // 必要时添加Referer头,值为登录页面URL
        // webRequest.SetRequestHeader("Referer", loginPageUrl);

        // 显式开启自动重定向(Unity默认已开启)
        webRequest.allowAutoRedirect = true;

        yield return webRequest.SendWebRequest();

        if (webRequest.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError("登录请求失败: " + webRequest.error);
            yield break;
        }

        // 获取跳转后的页面文本内容
        string targetPageContent = webRequest.downloadHandler.text;
        Debug.Log("跳转页面内容: " + targetPageContent);
        // 此处可按需解析页面内容,提取所需数据
    }
}

4. 整合完整流程调用

将上述两个协程结合,完成从获取验证字段到登录、获取跳转页面的完整流程:

public void StartLoginFlow(string loginPageUrl, string loginPostUrl, string username, string password)
{
    StartCoroutine(GetLoginPageAndExtractToken(loginPageUrl, (csrfToken) => 
    {
        if (string.IsNullOrEmpty(csrfToken))
        {
            Debug.LogError("未提取到必要的验证字段");
            return;
        }
        StartCoroutine(SubmitLogin(loginPostUrl, username, password, csrfToken));
    }));
}

关键注意事项

  • 动态字段适配:如果网站的隐藏字段不是csrf_token,要根据实际页面HTML调整正则表达式,比如部分网站用_token、authenticity_token等。
  • 请求头模拟:必须设置User-Agent,部分网站会拒绝非浏览器标识的请求;必要时补充Accept、Referer等头。
  • HTTPS证书处理:如果目标网站证书不被Unity信任,可自定义CertificateHandler跳过验证(仅测试环境使用,生产环境不推荐):
    webRequest.certificateHandler = new IgnoreCertificateHandler();
    
    自定义类实现:
    public class IgnoreCertificateHandler : CertificateHandler
    {
        protected override bool ValidateCertificate(byte[] certificateData)
        {
            return true;
        }
    }
    
  • JS跳转处理:如果登录后的跳转是通过JS实现(而非3xx状态码),需解析登录响应中的JS代码,提取跳转URL后手动发起GET请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:50:46