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

VBA登录Tradejini Cube网站获取Cookie失败,请求技术指导

问题描述

我尝试登录网站https://cube.tradejini.com/#/并获取Cookie信息,但编写的VBA代码在验证凭据时失败。该网站登录需验证用户名、密码及验证问题三个字段,以下是我的代码(我是VBA新手):

With CreateObject("WinHttp.WinHttpRequest.5.1")
    .Open "POST", url, False
    .setRequestHeader "REFERER", url
    .setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
    .setRequestHeader "content-type", "application/json"
    .setRequestHeader "Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
    .setRequestHeader "Accept-Language", "en-us,en;q=0.5"
    .setRequestHeader "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
    .SetCredentials "TSUser1", "Password", "1989"
    .send        
strCookie = .GetAllResponseHeaders

End With
问题分析与修正方案

你的代码存在几个关键问题,导致登录验证失败:

  • SetCredentials方法误用:WinHttpRequest的SetCredentials是用于HTTP基础/摘要认证的,而该网站是通过POST请求传递登录参数,并非这类HTTP认证机制,所以这个方法完全不适用。
  • 未传递登录数据:你设置了content-type为application/json,但没有在send方法中携带包含用户名、密码、验证问题的JSON数据,服务器根本接收不到你的登录凭据。
  • 请求URL错误:你使用的是带哈希路由的首页URL,实际登录请求需要发送到后端API接口(比如/api/login这类地址),需通过浏览器开发者工具抓包确认真实接口。
  • User-Agent过于老旧:IE6的User-Agent可能被网站拦截,建议更换为现代浏览器的UA。

修正后的代码示例(需先确认真实登录接口)

Sub LoginAndGetCookie()
    Dim http As Object
    Dim loginUrl As String
    Dim payload As String
    Dim strCookie As String
    
    ' 替换为抓包得到的真实登录API接口
    loginUrl = "https://cube.tradejini.com/api/login"
    
    ' 构造JSON格式的登录参数,字段名需和网站实际要求一致
    payload = "{""username"":""TSUser1"",""password"":""Password"",""securityAnswer"":""1989""}"
    
    Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
    With http
        .Open "POST", loginUrl, False
        .setRequestHeader "Referer", "https://cube.tradejini.com/#/"
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Accept", "application/json, text/plain, */*"
        
        ' 发送包含登录信息的JSON数据
        .send payload
        
        ' 获取响应中的Cookie
        strCookie = .GetResponseHeader("Set-Cookie")
        MsgBox "获取到的Cookie:" & strCookie
    End With
    Set http = Nothing
End Sub

额外注意事项

  • 抓包确认接口和字段:打开浏览器F12开发者工具,切换到Network标签,完成登录操作后找到POST类型的登录请求,复制其URL和请求体中的字段名(可能和示例不同)。
  • CSRF令牌处理:部分网站要求请求中携带CSRF令牌,需先访问首页获取该令牌,再在登录请求中传递。
  • Cookie提取:如果网站返回多个Cookie,可通过GetAllResponseHeaders获取所有响应头,再从中筛选Set-Cookie相关内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:45:43