You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Excel中使用VBA获取Cookie的完整值?

如何在Excel中使用VBA获取Cookie的完整值?

嘿,我来给你唠唠怎么在Excel里用VBA拿到完整的Cookie值,就拿请求NSE印度交易所的API这个场景举例,步骤和代码都给你整明白:

首先得搞清楚:当用WinHttpRequest发送请求后,服务器返回的响应头里会包含Cookie信息,但有时候Cookie是分散在多个Set-Cookie响应头里的,直接固定取某一行容易漏或者出错,所以得遍历所有响应头来收集完整的Cookie。

下面是修正后的完整VBA代码,你可以直接复制到Excel的VBA编辑器里用:

Sub GetCookie_Price()
    Dim strUrl As String
    Dim httpObj As Object
    Dim responseHeaders As String
    Dim headerLines() As String
    Dim i As Integer
    Dim fullCookie As String
    
    ' 目标API地址
    strUrl = "https://www.nseindia.com/api/equity-stockIndices?index=SECURITIES%20IN%20F%26O"
    
    ' 创建WinHttp请求对象
    Set httpObj = CreateObject("WinHttp.WinHttpRequest.5.1")
    
    With httpObj
        .Open "GET", strUrl, False
        ' 设置请求头,模拟浏览器请求,避免被服务器拦截
        .SetRequestHeader "REFERER", strUrl
        .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
        .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.9"
        .SetRequestHeader "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
        ' 发送请求
        .send
        
        ' 获取所有响应头
        responseHeaders = .getAllResponseHeaders
        ' 按换行拆分响应头为单独的行
        headerLines = Split(responseHeaders, vbCrLf)
        
        ' 遍历所有响应头行,收集所有Set-Cookie的值
        fullCookie = ""
        For i = LBound(headerLines) To UBound(headerLines)
            If InStr(1, headerLines(i), "Set-Cookie:", vbTextCompare) > 0 Then
                ' 提取Cookie值(去掉"Set-Cookie: "前缀,以及后面的过期等参数)
                Dim cookiePart As String
                cookiePart = Split(headerLines(i), ";")(0)
                cookiePart = Replace(cookiePart, "Set-Cookie: ", "")
                ' 拼接Cookie,用分号分隔
                If fullCookie <> "" Then fullCookie = fullCookie & "; "
                fullCookie = fullCookie & Trim(cookiePart)
            End If
        Next i
        
        ' 输出完整Cookie到立即窗口,你也可以写到单元格里,比如Range("A1").Value = fullCookie
        Debug.Print "完整Cookie值:" & fullCookie
    End With
    
    Set httpObj = Nothing
End Sub

关键部分说明:

  • 模拟浏览器请求:设置User-AgentReferer这些请求头是为了让服务器认为咱们是正常的浏览器访问,不会被反爬虫机制拦截。
  • 遍历响应头:不再固定取第5行,而是遍历所有响应头行,找到所有带Set-Cookie的行,这样不管Cookie在哪个位置都能拿到。
  • 拼接完整Cookie:把每个Set-Cookie里的有效部分提取出来,用分号拼接,得到完整的Cookie字符串。

小提示:

  • 运行代码前,记得打开Excel的VBA编辑器(按Alt+F11),插入一个模块,把代码粘贴进去。
  • 你可以把Debug.Print换成单元格赋值,比如Range("A1").Value = fullCookie,直接把Cookie写到Excel单元格里。
  • 如果遇到请求失败,可能需要更新User-Agent为你当前浏览器的实际UA,或者检查网络连接。

备注:内容来源于stack exchange,提问作者kapildevsharma

火山引擎 最新活动