能否在HttpAddRequestHeaders()中使用空请求头值?
WinInet添加空值请求头失败的问题解决
尽管HTTP RFC允许空值请求头,但WinInet的HttpAddRequestHeaders函数对请求头格式有严格的内部校验——直接传入"EmptyHeader01:"这类空值格式的头会触发参数错误(通常返回ERROR_INVALID_PARAMETER)。这是因为该函数默认要求头字段的取值部分必须包含合法内容,哪怕是空格也无法通过校验,你的几种调用方式(带换行、空格或直接冒号结尾)都不符合这个规则,所以全部失败。
解决方法
要发送空值请求头,建议绕过HttpAddRequestHeaders,直接在HttpSendRequest中传入完整的请求头字符串:
// 构造包含空值头的请求头,每个头字段以\r\n结尾 const char* customHeaders = "EmptyHeader01:\r\nX-Other-Header: test\r\n"; if (!HttpSendRequestA(hRequest, customHeaders, strlen(customHeaders), NULL, 0)) { std::cout << "HttpSendRequestA failed with error: " << GetLastError() << std::endl; }
这种方式直接将请求头发送给服务器,不会经过WinInet对单个头字段的校验,能够成功发送符合RFC规范的空值请求头。
内容的提问来源于stack exchange,提问作者AppLa
相关产品推荐
相关产品推荐

