这是我第一次进行任何形式的编码(当然,这是我第一次接触VBA ...);如果我的问题太基本了,请忍受。
我正在尝试使用excel VBA宏登录网站。 登录后,网站会自动重定向到另一个页面。 在页面重定向之前,如何从响应标头中获取Cookie?
我尝试了以下代码,但是返回的响应标头来自重定向后的页面,而不是先前的登录页面。
在代码中以stackoverflow.com为例。
从Chrome检查了网络活动,结果似乎不是我需要的结果:
Request URL: https://stackoverflow.com/users/login?
Status Code: 302
已经研究了一段时间,但找不到解决方案。你能帮我吗?
代码:
Private Sub login()
Dim http As New ServerXMLHTTP60
Dim html As New HTMLDocument
Dim url As String
url = "https://stackoverflow.com/users/login?"
http.Open "GET", url, False
http.send
Dim fkeyString As String
fkeyString = getFkeyString(url, http, html)
Dim login_id As String
login_id = InputBox("Login ID")
Dim login_pwd As String
login_pwd = InputBox("Password")
Dim login_data As String
login_data = _
"fkey=" & fkeyString & _
"ssrc=login" & _
"email=" & login_id & _
"password=" & login_pwd & _
"oauth_version=" & _
"oauth_server="
Dim post_request As Object
Set post_request = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim header As String
With post_request
.Open "POST", url, False
.setRequestHeader "content-type", "application/x-www-form-urlencoded"
.setRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
.send login_data
End With
Cells(1, 1) = http.getAllResponseHeaders
End Sub
Private Function getFkeyString( _
ByVal url As String, _
ByVal http As ServerXMLHTTP60, _
ByVal html As HTMLDocument _
)
html.body.innerHTML = http.responseText
getFkeyString = Trim(CStr(html.getElementsByName("fkey")(0).Value))
End Function