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
相关产品推荐
相关产品推荐

