WinHTTP 会话

87 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

在需要从http上下拉数据到时用 需要进行一系列的流程,如图所示。此图来源于官网网站

可以同这个图片上了解到初始化的大概流程,但是在使用过程中会有一点小的变化(个人使用习惯问题)但是大致流程与此完全相同。

无标题.png

对 WinHTTP进行初始化

第一步:创建一个会话**

WinHttpOpen 他会返回一个句柄,主要在后续创建连接时使用,以便后续的使用。他的作用主要是维护 http 会话的详细信息。**

第二步 创建一个链接

WinHttpConnect 他所返回的句柄使用在后面的打开请求时,它用于指定目标的 http 以及端口。**

第三步 创建一个请求

WinHttpOpenRequest 他所返回的句柄使用在后面的发送请求时,他用来打开特定资源的 http 请求,但是他不会将请求发送到服务器上,如果需要发送请求到服务器上需要使用 WinHttpSendRequest 函数。**

**

第四步 发送请求标头

WinHttpAddRequestHeaders 它所使用的句柄是创建请求所返回的句柄,他允许讲其他自由格式的请求标头追加到 http 请求句柄,他的追加方式有五种。**

**

其中最常用的是 WINHTTP_ADDREQ_FLAG_ADD

 

 

WINHTTP_ADDREQ_FLAG_ADD如果标头不存在,则添加标头。 与 WINHTTP_ADDREQ_FLAG_REPLACE一起使用。
WINHTTP_ADDREQ_FLAG_ADD_IF_NEW仅当标头不存在时,才添加标头;否则,返回false。
WINHTTP_ADDREQ_FLAG_COALESCE合并同名的标头。
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA使用逗号合并同名的标头。 由调用应用程序决定,以确保合并/单独标头的凝聚力方案。
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON使用分号合并同名的标头。
WINHTTP_ADDREQ_FLAG_REPLACE替换或删除标头。 如果标头值为空且找到标头,则会将其删除。 如果标头值不为空,则替换标头值。

 

第五步 发送请求

WinHttpSendRequest 它所使用的句柄是创建请求所返回的句柄,他的作用是与服务器创建链接,并且把请求发到指定的站点。后续会涉及获取数据,但是要注意的是在获取数据之前必须使用WinHttpReceiveResponse才能access服务器返回的数据

 

第六步 获取数据

首先使用WinHttpQueryDataAvailable 获取请求返回的数量,在按照所返回的长度进行申请刷空间,最后通过WinHttpReadData服务服务器的返回数据