【发布时间】:2018-04-25 03:25:07
【问题描述】:
我正在处理 WinInet,我想知道 HttpAddRequestHeaders 函数(使用 HttpOpenRequest 句柄)设置的标头与 HttpSendRequest 函数发送的标头之间的实际区别是什么。
为了简化我的代码,有一个更好的地方来定义这样的标题吗?我想避免处理这两种方式
【问题讨论】:
我正在处理 WinInet,我想知道 HttpAddRequestHeaders 函数(使用 HttpOpenRequest 句柄)设置的标头与 HttpSendRequest 函数发送的标头之间的实际区别是什么。
为了简化我的代码,有一个更好的地方来定义这样的标题吗?我想避免处理这两种方式
【问题讨论】:
根据 Microsoft 文档:
该函数还允许客户端指定可选数据发送到 紧跟在请求标头之后的 HTTP 服务器。这个功能是 一般用于“写”操作,例如 PUT 和 POST。
HttpAddRequestHeaders function
HTTP_ADDREQ_FLAG_ADD
如果标题不存在,则添加它。与 HTTP_ADDREQ_FLAG_REPLACE 一起使用。
HTTP_ADDREQ_FLAG_ADD_IF_NEW
仅当标题不存在时才添加它;否则返回错误。
HTTP_ADDREQ_FLAG_COALESCE
合并同名标题。
HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
合并同名标题。例如,使用此标志添加“Accept: text/”后跟“Accept: audio/”会形成单个标题“Accept: text/, audio/”。这会导致发现的第一个标头被合并。由调用应用程序来确保与合并/单独的标头相关的内聚方案。
HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON
使用分号合并同名标题。
HTTP_ADDREQ_FLAG_REPLACE
替换或删除标题。如果标头值为空并且找到标头,则将其删除。如果不为空,则替换标头值。
因此,如果您只想“添加请求标头”,那么任一 API 都会为您提供相同的功能。
如果您想做“一些特别的事情”(例如“合并标头”),您可能会选择一个或另一个 API。
'希望有帮助
【讨论】: