Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 MSXML2.XMLHTTP无法发送请求cookie标头_Excel_Vba_Cookies_Msxml_Winhttp - Fatal编程技术网

Excel MSXML2.XMLHTTP无法发送请求cookie标头

Excel MSXML2.XMLHTTP无法发送请求cookie标头,excel,vba,cookies,msxml,winhttp,Excel,Vba,Cookies,Msxml,Winhttp,我正在尝试使用ExcelVBA创建一些自动化的web搜索,但是为了使用它,您需要同意它的条款和条件。然后,网站将您的协议存储在cookie“agree=True”中 但是,在使用MSXML2.XMLHTTP时,我无法使用setRequestHeader设置cookie请求头,因此它会将我重定向到每个请求的用法同意页面。我知道如上所述使用MSXML2时存在错误,但我不知道如何使用Excel链接中提供的解决方法。(调用两次setRequestHeader将不起作用) 这是我正在使用的代码: Set

我正在尝试使用ExcelVBA创建一些自动化的web搜索,但是为了使用它,您需要同意它的条款和条件。然后,网站将您的协议存储在cookie“agree=True”中

但是,在使用
MSXML2.XMLHTTP
时,我无法使用
setRequestHeader
设置cookie请求头,因此它会将我重定向到每个请求的用法同意页面。我知道如上所述使用MSXML2时存在错误,但我不知道如何使用Excel链接中提供的解决方法。(调用两次
setRequestHeader
将不起作用)

这是我正在使用的代码:

Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")

Dim CAGE As String

CAGE = "3K723" 'Could be any CAGE Code, using this one as example

url = "https://cage.dla.mil/Search/Results?q=" & CAGE & "&page=1"

objHTTP.Open "GET", url, False
objHTTP.SetRequestHeader "Cookie", "agree=True"
objHTTP.send

Cells(1, 1).Value = objHTTP.ResponseText
我知道这个问题可以通过使用
MSXML2.ServerXMLHTTP
WinHTTP.WinHTTPRequest.5.1
而不是
MSXML2.XMLHTTP
来解决,但是因为网站使用的是HTTPS协议而不是HTTP,
ServerXMLHTTTP
WinHTTP
无法解析它的地址。因此它返回以下错误:

"


有人知道我如何使用MSXML2.XMLHTTP正确设置Cookie头,或者如何将WinHTTP与HTTPS网站一起使用吗?

为什么不使用Internet Explorer?您只需单击一次“同意”按钮,以后就可以了。@Zwenn我不确定是否理解您的建议,但如果您说要使用
set IE=Creat之类的东西,请eObject(“InternetExplorer.Application”)
在ExcelVBA内部,我认为这不是一个好主意,因为每次搜索时加载整个网页而不是请求只返回我所需的数据会花费很长时间。您是否尝试过类似的
Set objHTTP=CreateObject(“WinHttp.WinHttpRequest.5.1”)方法
objHTTP.Option(6)=False
。它会关闭每个证书安全弹出窗口。谢谢@Teamothy,但我已经尝试过了,并且还使用
objHTTP.setClientCertificate('CURRENT\u USER\MY\USERNAME')发送了证书
,但没有任何变化,我仍然遇到了相同的错误。我不认为问题出在TSL/SSL协议中,否则我想我会遇到安全错误。@Zaad您希望发出多少请求?您希望节省多少时间?在您找到特定问题的解决方案之前,我会采取务实的方法。IE不是这样吗低,尤其是因为VBA中的查询只按顺序工作。如果需要快速工作的解决方案,则必须使用例如Python并并行发送多个查询。