我正在VBA中使用xmlhttp连接到API。问题是我需要使用相同的API链接多次创建循环,唯一的不同是我发送了不同的JSON字符串。
是否可以只打开一次连接并发送标头和身份验证,然后多次发送数据并接收响应?
主要目的是提高代码速度。 我知道我可以在循环内发送标头并进行身份验证,但是对于我的需求而言,它运行太慢。
谢谢!
(,)
答案 0 :(得分:0)
不,我不认为您可以使用xmlhttp(很高兴被证明是错误的)来保留标题。最好的办法是在循环外创建xmlhttp对象,并将某些值保留在变量中以供重复使用。您仍然必须提供.Get,.Send和标头的事务。
就保留身份验证而言,我认为您可以登录一次,然后使用MSXML2.ServerXMLHTTP根据后续期限(在有效期内)在后续请求中传递cookie(JSESSION)。
其他语言,例如python,您可以执行http sessions。这使您可以在请求中保留某些参数。
HTTP持久连接,也称为HTTP保持活动状态或HTTP 连接重用,是使用单个TCP连接发送的想法 并接收多个HTTP请求/响应,而不是打开一个 每个单个请求/响应对的新连接。较新的 HTTP / 2协议使用相同的想法,并进一步允许 多个并发请求/响应将在单个上复用 连接。
在python中,for example:
会话也可以用于向请求提供默认数据 方法。这是通过向会话的属性提供数据来完成的 对象。
因此,您创建Session
对象,该对象具有与发出请求的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'})
session标识在对话期间源自同一浏览器的请求。所有servlet可以共享同一会话。 JSESSIONID由服务器生成,可以通过cookie传递给客户端 Srinivas Balasani
优势:
- 减少了后续请求中的延迟(无握手)。
- 由于更少的新连接和TLS握手,减少了CPU使用率和往返次数。
- 启用HTTP管道的请求和响应。
- 减少了网络拥塞(更少的TCP连接)。
- 可以在不关闭TCP连接的情况下报告错误。
根据RFC 7230第6.4节,“客户端应限制 它与给定保持的同时打开的连接数 服务器”。HTTP/ 1.1规范的先前版本已声明 特定最大值,但用RFC 7230的话来说“ 在许多应用中不切实际...反而比较保守 当打开多个连接时”。这些准则旨在 缩短HTTP响应时间并避免拥塞。如果HTTP流水线 正确实施,将不会获得性能优势 来自其他连接,而其他连接可能会导致 拥塞问题
缺点:
如果客户端没有关闭所有数据时的连接 需求已收到,保持连接所需的资源 在服务器上打开将对其他客户端不可用。多少 这会影响服务器的可用性以及资源的持续时间 不可用取决于服务器的体系结构和配置。
因此,仍然使用python示例,我们通常使用with
语句,该语句在执行嵌套在其中的代码块执行后自动确保与exit方法的连接关闭。
我认为WinHttp具有setting cookies的功能。其他会话信息here。尽管有mention个指向字符串的指针
lpszHeaders
:
指向包含附加标头的字符串的指针 的要求。如果此参数可以是WINHTTP_NO_ADDITIONAL_HEADERS 没有要附加的其他标题。
这不是我尝试过的事情。