Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel VBA中使用MSXML2进行Cookie身份验证_Excel_Vba_Xmlhttprequest - Fatal编程技术网

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

在Excel VBA中使用MSXML2进行Cookie身份验证,excel,vba,xmlhttprequest,Excel,Vba,Xmlhttprequest,我正在尝试创建一个Excel宏来在网站上执行搜索并检索结果。我使用Chrome开发工具来可视化浏览器所做的请求,然后在excel中复制它们。 没有登录,因此身份验证部分始终为空,但当您首次访问网站时,它会发送一个GET请求,返回一个设置的Cookie响应头,然后您必须使用此Cookie才能发出任何其他请求,但由于某些原因,当您试图通过excel或任何其他非浏览器的服务使用它时,它会返回一个“会话已过期”错误。 我试着用Postman来重现它发出的每一个请求,每一个标题和参数,但它只有在浏览器会话

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

我在另一个论坛上读到,在制作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。这样我就不需要通过ExcelVBA进行身份验证,但因为这会花费我一些精力,所以我决定先问一下这是否可行


这是我在StackOverflow上的第一篇帖子,如果我遗漏了一些信息,或者有什么不清楚的地方,请告诉我。

Install,然后您可以看到原始浏览器请求&来自MSXML代码的请求-比较它们并添加前一个中不存在的头。我刚刚安装了它,但是excel请求没有显示在其中,知道为什么吗?请尝试添加
objHTTP.setProxy 2,“http=localhost:8888”,”