Excel 不关闭连接的VBA xmlhttprequest循环
我正在VBA中使用xmlhttp连接到API。问题是,我需要使用相同的API链接多次创建一个循环,唯一的区别是我发送了不同的JSON字符串 是否可以打开连接并只发送一次标头和身份验证,然后多次发送数据和接收响应 主要目的是提高代码的速度。 我知道我可以在循环内发送头文件并进行身份验证,但它运行速度太慢,无法满足我的需要 谢谢大家!Excel 不关闭连接的VBA xmlhttprequest循环,excel,vba,xmlhttprequest,Excel,Vba,Xmlhttprequest,我正在VBA中使用xmlhttp连接到API。问题是,我需要使用相同的API链接多次创建一个循环,唯一的区别是我发送了不同的JSON字符串 是否可以打开连接并只发送一次标头和身份验证,然后多次发送数据和接收响应 主要目的是提高代码的速度。 我知道我可以在循环内发送头文件并进行身份验证,但它运行速度太慢,无法满足我的需要 谢谢大家! APIKey = "xx" Session = "ss" API_Link = "zz" Dim xhr: Set xhr =
APIKey = "xx"
Session = "ss"
API_Link = "zz"
Dim xhr: Set xhr = CreateObject("MSXML2.XMLHTTP")
With xhr
.Open "POST", API_Link, False
.setRequestHeader "X-Application", APIKey
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "X-Authentication", Session
End With
For Each cl In Rng
'The below runs only the first time then it gives an error
xhr.send JSON_Query
a = xhr.ResponseText
next cl
不,我不相信您可以使用xmlhttp(很高兴被证明是错误的)来保存头。您最好在循环外创建xmlhttp对象,并在变量中保存某些值以供重用。您仍然需要提供.Get、.Send的事务和标题 在保留身份验证方面,我认为您可以登录一次,然后在后续请求中传递cookies(JSESSION),具体取决于过期时间 在其他语言中,例如python,您可以实现。这允许您跨请求持久化某些参数 HTTP持久连接,也称为HTTP保持活动状态,或HTTP 连接重用,是使用单个TCP连接发送数据的想法 并接收多个HTTP请求/响应,而不是打开 每个请求/响应对的新连接。新的 HTTP/2协议使用了相同的思想,并进一步允许 多个并发请求/响应在单个服务器上多路传输 连接 在python中: 会话还可用于向请求提供默认数据 方法。这是通过向会话上的属性提供数据来实现的 反对 因此,您可以创建
会话
对象,该对象的方法与发出请求的API库相同(就像xmlhttp一样),然后更新保存的头文件
s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
s.get('https://httpbin.org/headers', headers={'x-test2': 'true'})
A标识会话期间来自同一浏览器的请求。所有servlet都可以共享同一个会话。JSESSIONID由服务器生成,可以通过cookie传递给客户端
斯里尼瓦斯巴拉萨尼
优点:
with
语句,该语句在执行嵌套在其中的代码块后自动确保使用exit方法关闭连接
我认为WinHttp有很多功能。附加会话信息。虽然有很多指向字符串的指针
lpszHeaders
:
指向包含附加头的字符串的指针
根据请求。此参数可以是WINHTTP\u NO\u附加\u头,如果
没有附加的头
这是我从未尝试过的
尽管你可以通过COM找到解决方案