如何通过POST VBA Httprequest传递登录名和密码?



我需要通过httprequest登录https网站。

我正在尝试使用这篇文章中的代码 VBA WinHTTP 从密码保护的 https 网站下载文件

但我只得到那个答案:"找不到用户" - 但我知道当我手动登录时,用户和密码工作正常。

我的主要疑问是字符串 strAuthenticate 中的参数来自哪里?

以及为什么当我使用 http 嗅探器程序时,我看不到任何带有"授权"字或我的用户名/密码的 http 标头。

该网站是基于表单的身份验证类型。有没有办法(或我应该(在我的代码中通知对用户名和密码的 HTML 文本框对象的任何引用?(在这种情况下,我该怎么做?

Sub SaveFileFromURL()
Dim WHTTP As WinHttp.WinHttpRequest
Set WHTTP = New WinHttpRequest
mainUrl = "https://www.somesite.com.br/Login.php"    
myuser = "userA"
mypass = "passuserA"
strAuthenticate = "start-url=%2F&user=" & myuser & "&password=" & mypass & "&switch=Log+In"
WHTTP.Open "POST", mainUrl, False
WHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.SetRequestHeader "Authorization", "Basic " & EncodeBase64(StrConv(    myuser & ":" & mypass, vbFromUnicode))
WHTTP.Send
End Sub

非常感谢所有的帮助。事实证明,找到答案的关键是使用正确的工具。 正如@chillin建议的那样,使用流量分析仪是必不可少的。我试图获取带有"Live HTTP Headers"chrome扩展名的HTTP标头,但这仅提供了有关手动身份验证过程的信息,即使如此,信息也不完整。

所以我下载了"WireShark"并尝试嗅探HTTP流量,但我不能,因为它是加密的。然后我做了一些研究,发现了这种解决加密的方法:

https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/

在本分步指南并应用 http 数据包过滤器(只需在 wireshark 过滤器文本框中写入 http(之后,我能够嗅探 HTTP 流量(我手动登录网站时生成的流量和通过 excel(vba( HTTPREQUEST 生成的流量。

在此之后,一切都变得更容易了,我最终得到了下面的代码:

Sub HTTPRESQUEST()
'https://stackoverflow.com/questions/22051960/vba-winhttp-to-download-file-from-password-proteced-https-website/
'https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/
'https://wiki.wireshark.org/TLS?action=show&redirect=SSL
'https://wiki.wireshark.org/TLS#Using_the_.28Pre.29-Master-Secret
Dim WHTTP As WinHttp.WinHttpRequest
Set WHTTP = New WinHttpRequest
'Logon page:
mainUrl = "https://www.somewebsite/Logar.php"
myuser = "myuser"
mypass = "mypassword"
strAuthenticate = "username=" & myuser & "&bypass=" & mypass
WHTTP.Open "POST", mainUrl, False
WHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.Send strAuthenticate

结束子

这足以使网站登录。无需对用户名和密码进行编码。

PS:在strAuthenticate中,"用户名"和"绕过"是用户名文本框和密码文本框的HTML对象ID。

我希望这件衣服可以帮助其他人。再次感谢所有的帮助!

最新更新