如何使用WinHttpQueryHeader()
函数查明是否从代理服务器或终端服务器发送了响应?我尝试将WINHTTP_QUERY_PROXY_AUTHENTICATE
用作函数dwInfoLevel
的{{1}}参数,但我得到的缓冲区为NULL。
winHttpQueryHeader()
int bufferSize = 0;
char lpOutBuffer[500];
ReturnVal = WinHttpQueryHeader(Handle, WINHTTP_QUERY_PROXY_AUTHENTICATE, NULL, &bufferSize);
ReturnVal= WinHttpQueryHeader(Handle, WINHTTP_QUERY_PROXY_AUTHENTICATE, lpOutBuffer, &bufferSize);
为NULL。
实际上我认为这里的问题是我在第一个lpOutBuffer
获得了bufferSize
0,因此第二个WinHttpQueryHeader
没有填充WinHttpQueryHeader
(因为{ {1}}是0)。为什么lpOutBuffer
返回为0?
与此相反,如果我使用bufferSize
作为bufferSize
,我会得到正确的输出而InfoLevel
不是0,它会在第一个WINHTTP_QUERY_RAW_HEADERS_CRLF
之后填充调用..
答案 0 :(得分:0)
如果HTTP服务器需要身份验证,则HTTP响应代码为401,相应的响应头为WWW-Authenticate
。如果代理服务器需要身份验证,则HTTP响应代码为407,相应的响应头为Proxy-Authenticate
。我建议检查正确的HTTP代码的响应,然后检索相应的标头。
至于WINHTTP_QUERY_PROXY_AUTHENTICATE
查询标志,documentation州:
检索用于向代理标识用户的标头 要求认证。此标头只能在之前检索 请求被发送到服务器。
因此,特定标志与服务器的响应无关。它是一个请求标头,用于标识代理用户。