2012-11-01 32 views
1

如何通过使用WinHttpQueryHeader()函数找出响应是否是从代理或终端服务器发送的?我试过使用WINHTTP_QUERY_PROXY_AUTHENTICATE作为参数dwInfoLevel参数winHttpQueryHeader(),但是我得到的缓冲区是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); 

lpOutBuffer为NULL。

其实我觉得这里的问题是,我在第一时间拿到WinHttpQueryHeaderbufferSize 0等第二WinHttpQueryHeader没有填满lpOutBuffer(因为bufferSize为0)。为什么bufferSize返回为0?

与此相反,如果我使用InfoLevelWINHTTP_QUERY_RAW_HEADERS_CRLF,我得到正确的输出和bufferSize不为0,它获得的第WinHttpQueryHeader()调用后充满..

回答

0

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

至于WINHTTP_QUERY_PROXY_AUTHENTICATE查询标志,则documentation状态:

检索用于识别用户代理的是 需要认证的标题。只有在 请求被发送到服务器之前,才能检索到此标头。

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