我已经阅读了很多有关该主题的主题,但是需要朝着正确的方向推进。我正在尝试从安全的网站下载pdf。我可以使用vba Automation使用InternetExplorer登录并成功浏览网页。这是一项要求,因为我需要获取文件列表并构建URL。我能做的。
我正在尝试使用winnhttp 5.1下载文件,并且如果我从fiddler手动提供6个cookie,下载代码也可以工作。在这里,我坚持我认为可能不是太难的部分。到目前为止,我已经分两批拿到了饼干。从document.cookie得到4,包括一个authToken。从我的winhttp流中,我得到了两个仅包含HTTP的cookie,其中包括一个ASP会话ID,但最终我意识到这两个确实是一个不同的“会话”。据我了解,这两个http cookie永远不会在document.cookie中公开。但是,因为我在winhttp流中获取了它们,所以我认为可以。
This is my first call that nets me the two http cookies
WinHttpReq.Open "POST", strUrl, False
WinHttpReq.setRequestHeader "Cache-Control", "no-cache"
WinHttpReq.setRequestHeader "Referer", "https://atlasbridge.com/default.aspx"
WinHttpReq.setRequestHeader "X-MicrosoftAjax", "Delta=true"
WinHttpReq.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
WinHttpReq.setRequestHeader "Connection", "keep-alive"
WinHttpReq.setRequestHeader "Accept", "*/*"
WinHttpReq.setRequestHeader "Accept-Language", "en-US"
WinHttpReq.setRequestHeader "Accept-Encoding", "gzip, deflate"
WinHttpReq.setRequestHeader "Host", "atlasbridge.com"
WinHttpReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"
'uname & password are established earlier in the code & are the correct values
WinHttpReq.SetCredentials UName, Pword, 0
WinHttpReq.Send
我可以肯定我可以解析cookie。我只需要返回包含身份验证令牌的前4个Cookie。我想我需要先向网站发送一些请求,然后再向报告页面发送请求(从首页到报告的一个cookie更改),但是由于我需要用户名和密码来验证我该如何在winhttp(或我使用另一个mwthod)。我可以登录该页面,但这并不能使我获得仅HTTP的Cookie,因此我需要以其他方式进行身份验证(我认为)。
p.s。我捕获并解析cookie到此为止。 How to download file from secure website with WinHTTPRequest.5.1
我已经更新了问题中的代码,但是我仍然不确定如何使用winhttp进行身份验证。
我得到的响应是(我得到两个cookie,但我不需要另外四个cookie: 状态码:200 OK 缓存控制:私有 日期:2019年1月28日星期一19:45:23 GMT 内容长度:2033 内容类型:text / html;字符集= utf-8 内容编码:gzip 服务器:Microsoft-IIS / 7.0 Set-Cookie:ASP.NET_SessionId = xxxxxxxxxx;路径= /;安全; HttpOnly Set-Cookie:NSC_bumbtcsjehf.dpn_TTM_443xxxxxxxxxxxxxxxx; Version = 1; Max-Age = 2400; path = /; secure; httponly X-AspNet版本:4.0.30319 兼容X-UA:IE = edge X-Powered-by:ASP.NET Cteonnt-Length:4489
我还使用提琴手在文本视图中看到: ScriptManager1 = UpdatePanel1%7CcmdLogin&__ EVENTTARGET =&__ EVENTARGUMENT =&__ VIEWSTATE = 6mcXww3ohBjEvWka9jUmRYsQUSnYbYvMovHGR6aC%2BUr5hum9HsnxvbQYFOUuvkWDHWcIz5hftDgGPlmEOUJUqC11qvzFgYZh24%2FDDMPA6e0A7AeaAWc0mRfrrbYjbUeUvPE38g%3D%3D&__ VIEWSTATEGENERATOR = CA0B0334&__ EVENTVALIDATION = 5XlJ8vCmmt4cJhBg5XYEHmCDfdimT2%2FjpQGEczZ7weYVU3RB%2BZzR7pLr2RN%2F6ooiMEnAs6DMB26%2F3fXnRVrNpvT6Qaj62mNxwriRgMUs2WY5e538aZbVQ1dXouLb1cAAnPt%2BOfWGWfumid1o3Eg%2FYOyuvRA%3D&txtUserName = MyUsernamevaluehere&txtPassword = MyPasswordvaluehere&__ ASYNCPOST =真cmdLogin.x = 33&cmdLogin.y = 15.569999694824218
Fiddler显示的第一个“ Post”请求是XMLHttpRequest。我仍然只得到2个cookie(相同的2个)。