在调用微软winhttp的WinHttpQueryHeaders函数时候遇到的问题

来源:互联网 发布:数控车倒螺纹编程实例 编辑:程序博客网 时间:2024/05/16 11:24

函数原型如下:

BOOL WINAPI WinHttpQueryHeaders(  __in      HINTERNET hRequest,  __in      DWORD dwInfoLevel,  __in_opt  LPCWSTR pwszName,  __out     LPVOID lpBuffer,  __inout   LPDWORD lpdwBufferLength,  __inout   LPDWORD lpdwIndex);


开发环境:win7,vs2010

 

问题1:当参数lpBuffer为NULL,传入dwBufferLen接收缓冲区长度,按照msdn里的描述,这个时候函数应该返回FALSE,dwBufferLen应该返回实际需要缓冲区的大小,调用GetLastError() 应该返回ERROR_INSUFFICIENT_BUFFER。

lpBuffer [out] Pointer to the buffer that receives the information. Setting this parameter to WINHTTP_NO_OUTPUT_BUFFER causes this function to return FALSE. Calling GetLastError then returns ERROR_INSUFFICIENT_BUFFER and lpdwBufferLength contains the number of bytes required to hold the requested information. 


实际测试结果是,dwBufferLen返回实际要缓冲区的大小,而GetLastError()并没有返回ERROR_INSUFFICIET_BUFFER,而是返回0

 

问题2:想要通过该函数查询hRequest所关联的cookie,获取不到。根据msdn的描述

WINHTTP_QUERY_COOKIE Retrieves any cookies associated with the request.


实际代码测试结果:

调用

dwBufLen = 0;

WinHttpQueryHeaders(hRequest,

                                    WINHTTP_QUERY_COOKIE|WINHTTP_QUERY_FLAG_REQUEST_HEADERS,

                                     WINHTTP_HEADER_NAME_BY_INDEX,

                                     NULL,

                                      &dwBufLen,

                                      WINHTTP_NO_HEADER_INDEX);

 

返回dwBufLen始终为0,,而且GetLastError() 也没有返回ERROR_INSUFFICIENT_BUFFER的错误。获取不到和hRequest相关联的cookie信息。

 

问题3:在查询Request的原始请求头的时候(WINHTTP_QUERY_RAW_HEADERS_CRLF|WINHTTP_QUERY_FLAG_REQUEST_HEADERS),返回的数据不是实际发出去的http请求头,数据简单,不完全,例如没有获得实际发送http请求头时所带的cookie字段,通过实际抓包分析,是有cookie字段的。

GET / HTTP/1.1User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)Connection: Keep-Alive


 

原创粉丝点击