1

如何使用函数判断响应是从代理还是终端服务器发送的WinHttpQueryHeader()?我尝试将WINHTTP_QUERY_PROXY_AUTHENTICATE其用作dwInfoLevel函数的参数,winHttpQueryHeader()但我得到的缓冲区为 NULL。

int bufferSize = 0;
char lpOutBuffer[500];

ReturnVal = WinHttpQueryHeader(Handle, WINHTTP_QUERY_PROXY_AUTHENTICATE, NULL, &bufferSize);

ReturnVal= WinHttpQueryHeader(Handle, WINHTTP_QUERY_PROXY_AUTHENTICATE, lpOutBuffer, &bufferSize);

lpOutBuffer一片空白。

实际上我认为这里的问题是我bufferSize在第一个中得到了 0,WinHttpQueryHeader所以第二个WinHttpQueryHeader没有填充lpOutBuffer(因为bufferSize是 0)。为什么bufferSize返回为0?

与此相反,如果我使用InfoLevelas WINHTTP_QUERY_RAW_HEADERS_CRLF,我会得到正确的输出并且bufferSize不是 0,它会在第一次WinHttpQueryHeader()调用后被填充。

4

1 回答 1

0

如果 HTTP 服务器需要身份验证,则 HTTP 响应代码为 401,相应的响应标头为WWW-Authenticate. 如果代理服务器需要身份验证,则 HTTP 响应代码为 407,相应的响应标头为Proxy-Authenticate. 我建议检查正确的 HTTP 代码的响应,然后检索相应的标头。

至于WINHTTP_QUERY_PROXY_AUTHENTICATE查询标志,文档指出:

检索用于向需要身份验证的代理标识用户的标头。只能在请求发送到服务器之前检索此标头。

因此,该特定标志与服务器的响应无关。它是一个请求标头,用于向代理标识用户。

于 2012-11-03T05:54:19.833 回答