在Excel VBA中使用MSXML2进行Cookie身份验证

时间:2019-12-02 13:02:03

标签: excel vba xmlhttprequest

我正在尝试创建一个Excel宏以在网站上执行搜索并检索结果。我使用Chrome DevTools可视化浏览器的请求,然后在excel中复制它们。 没有登录,因此“身份验证”部分始终为空,但是,当您首次访问该网站时,它会发送一个GET请求,该请求返回一个Set-Cookie响应标头,然后您必须使用此Cookie才能发出任何其他请求,但对于由于某些原因,当您尝试通过excel或不是浏览器的任何其他服务来使用它时,它会返回“会话过期”错误。 我尝试使用Postman来重现它发出的每个请求,以及每个标题和参数,但是只有在打开浏览器会话(Postman Chrome扩展程序)的情况下,它才有效,如果使用桌面应用程序,它将无法正常工作。 不知道这是否是问题所在,但网站使用Servlet 3.0来处理其请求。

我在另一个论坛上的this post上读到,您在制作XMLHttpRequest时无法手动设置cookie(虽然不确定是否正确),所以我想知道是否有其他替代方法可以在excel中使用它,或者我做错了。我正在使用的代码可以通过以下方式恢复:

第一个请求,返回您一个cookie:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://MY_URL/index.jsp"
objHTTP.Open "GET", URL, False

objHTTP.send

MsgBox (objHTTP.getAllResponseHeaders)
cookie = Split(objHTTP.getResponseHeader("Set-Cookie"), ";")(0)

然后我将cookie存储在变量'cookie'中,然后将其作为标题传递给搜索请求:

URL = "http://MY_URL/SEARCH_SERVLET"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "Cookie", cookie

objHTTP.send ("lifecycle=drawingnumberdata&item=ITEM_PART_NUMBER&revision=&mode=&includehistoricaldrawings=false")

MsgBox (objHTTP.responseText)

我考虑过创建一个Web应用程序,以访问该网站并进行搜索,然后将结果传递给excel。这样,我就不需要通过Excel VBA进行身份验证,但是由于这会花费我一些精力,因此我决定首先询问是否可行。

这是我在StackOverflow上的第一篇文章,如果我错过了一些信息,或者不清楚的地方,请告诉我。

0 个答案:

没有答案