【问题标题】:How to get cookie information using excel vba如何使用excel vba获取cookie信息
【发布时间】:2020-10-10 11:26:51
【问题描述】:

我正在尝试从网络下获取 cookie 信息 --> 下面页面 https://www.nseindia.com/market-data/equity-derivatives-watch 的 RequestHeader 我从下面的代码中得到的只是响应标头“set-cookie”,但我需要请求标头下的“cookie”信息。下面是我试过的代码。

Function GetCookie(strUrl)
    With CreateObject("WinHttp.WinHttpRequest.5.1")
        .Open "GET", strUrl, False
        .SetRequestHeader "REFERER", strUrl
        .SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
        .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"
        .Send
        strCookie = .GetAllResponseHeaders

        strCookie = Split(strCookie, vbCrLf)

        Debug.Print strCookie

'        strCookie = Split(strCookie, ";")(0)
'        GetCookie = strCookie
    End With
End Function



Sub Demo()
Debug.Print GetCookie("https://www.nseindia.com/market-data/equity-derivatives-watch")
End Sub

我需要以下 cookie 信息

【问题讨论】:

    标签: excel vba web-scraping


    【解决方案1】:

    问题是 cookie 每 1 小时过期一次,所以我们必须刷新它们。

    Function GetCookie(strUrl)
    With CreateObject("WinHttp.WinHttpRequest.5.1")
        .Open "GET", strUrl, False
        .SetRequestHeader "REFERER", strUrl
        .SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
        .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"
        .Send
        strCookie = .getAllResponseHeaders
        strCookie = Split(strCookie, vbCrLf)
        GetCookie = Trim(Split(Split(strCookie(5), ";")(0), ":")(1)) & "; " & Trim(Split(Split(strCookie(6), ";")(0), ":")(1))
    End With
    End Function
    
    Sub get_cookies()
    Msgbox(GetCookie("https://www.nseindia.com/market-data/equity-derivatives-watch"))
    End Sub
    

    试试这个,它会返回 nsit 和 nseappid

    (Eg:- nsit=zk3-uf45niHVOsW_yaK2kIdWg; nseappid=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiONKJklmlmNIOJkjnkoivhvIiwiYXVkIjoiYXBpLm5zZSIsImlhdCI6MTVHJVHuihnjyuGyufhJNkoioxNjEzNjI3MjMyfQ.PDBf7k6fGsYicbM7sYeJrhE0OtGENf_e5YdRENkAHq0)

    为我工作,我已将其自动化。 我们需要 cookie 的链接是 NSE 站点,而不是特定的罢工或脚本。

    【讨论】:

      【解决方案2】:

      要获取 cookie 值,请从响应中获取 Set-Cookie 标头:

      strCookie = .GetResponseHeader("Set-Cookie")
      

      然后在以下请求中使用相同的 cookie:

      .SetRequestHeader("cookie", strCookie)
      

      【讨论】:

      • 提供有关 ResponseHeader 的信息,但我需要 RequestHeader 下的信息。
      • @Kiran 从第一个响应中获取初始 cookie,然后在后续请求中设置标头 .SetRequestHeader("cookie", strCookie)
      • 实际上我也需要会话详细信息,例如该 cookie 字段中的 _csrf 参数
      • @Kiran 不在问题中,如果它对您的原始问题有所帮助,请接受此答案,为新问题打开一个新问题。
      • 如果您再次检查问题,我已请求检索请求标头下的“cookie”字段中的信息,而不是 set-cookie 信息。
      猜你喜欢
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多