VBA如何用MSXML2.XMLHTTP登录

时间:2017-07-20 05:40:20

标签: vba

我不理解.SetRequestHeader

的含义

以下是在某些网站上登录的代码

Function webLogin()

   Dim Cookie As String

   Set oXHTTP = CreateObject("MSXML2.XMLHTTP")

   oXHTTP.Open "POST", "http://someURL/login", False, "admin", "adminpw"
   oXHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
   oXHTTP.Send



   Cookie = oXHTTP.GetResponseHeader("Set-Cookie")


   oXHTTP.Open "POST", "http://someURL/ord?station:%7Cslot:/", False
   oXHTTP.SetRequestHeader "Cookie", Cookie
   oXHTTP.Send


   Debug.Print oXHTTP.ResponseText

End Function

此代码正常运行但无法登录。

我认为这是因为SetRequestHeader的使用不当而网站上有一个提交按钮,但此代码没有点击按钮。

1 个答案:

答案 0 :(得分:1)

我可以告诉您登录适用于任何网站和支持网络请求的任何对象的常用方式。

首先向登录站点发出GET请求并获取所有必要的数据。从那个GET请求中,您通常会获得至少一个会话cookie。此外,您将获得为登录帖子提交所需的所有数据。因此,您的第一步应该是在开发者模式下使用google chrom / firefox打开登录页面并查看整个登录过程。

网站使用CRSF-Token之类的内容或网页中的其他字段具有某种独特ID并不罕见。有时它可以在标题中找到,有时它是一个隐藏的字段,需要在POST请求中发送才能登录。

因此,如果您发现了哪些cookie以及需要哪些POST数据。您的下一步是发送实际的POST请求,包括来自第一个GET请求的cookie并填写所有必需的POST数据。这至少是用户名和密码(确切的名称可以在浏览器的开发者模式中找到)。

从该POST请求中,您很可能会获得另一个cookie并重定向到您登录的起始页面。 因此,您需要将所有这些cookie用于登录后网站的所有进一步GET请求。