LPCTSTR lpHeader = _T("GET /img/baidu_sylogo1.gif /HTTP/1.1\r\n")_T("Referer: http://www.baidu.com/")_T("Host: www.baidu.com")_T("\r\n\r\n");
18. // HttpSendRequest返回0, dwErr = 12150, 含义ERROR_HTTP_HEADER_NOT_FOUND:The requested header could not be located.
19. Test2: // A/B/C行结尾没有\r\n
20. LPCTSTR lpHeader = _T("GET /img/baidu_sylogo1.gif /HTTP/1.1")_T("Referer: http://www.baidu.com/")_T("Host: www.baidu.com")_T("\r\n\r\n");
21. // HttpSendRequest返回1, dwErr = 0
22. Test3: // D行结尾一个\r\n
23. LPCTSTR lpHeader = _T("GET /img/baidu_sylogo1.gif /HTTP/1.1")_T("Referer: http://www.baidu.com/")_T("Host: www.baidu.com")_T("\r\n");
24. // HttpSendRequest返回1, dwErr = 0
25. Test4: // D行结尾没有\r\n
26. LPCTSTR lpHeader = _T("GET /img/baidu_sylogo1.gif /HTTP/1.1")_T("Referer: http://www.baidu.com/")_T("Host: www.baidu.com");
27. // HttpSendRequest返回1, dwErr = 0
从以上4个测试可以看出,HttpSendRequest的第二个参数header是一个字符串,A行必须不能有\r\n,其它行可以有,也可以没有.
在测试中还发现,仅仅只有A行会导致HttpSendRequest调用失败,必须得有B行.
其实lpHeader的值A行刚好对应HttpOpenRequest的参数lpszVerb,lpszObjectName和lpszVersion;B行对应参数lpszReferer.所以,#if 2...endif 还可以用下面的代码代替:
1. #if 3
2. hOpenRequestHandle = ::HttpOpenRequest(hConnectHandle, NULL, NULL, NULL, NULL, NULL, dwFlag, dwContext);
3. LPCTSTR lpHeader = _T("GET /img/baidu_sylogo1.gif /HTTP/1.1")_T("Referer: http://www.baidu.com/");
4. DWORD dwLen = _tcslen(lpHeader);
5. bRet = ::HttpAddRequestHeaders(hOpenRequestHandle, lpHeader, nLen, HTTP_ADDREQ_FLAG_REPLACE|HTTP_ADDREQ_FLAG_ADD);//返回1
6. bRet = ::HttpSendRequest(hOpenRequestHandle, NULL, 0, NULL, 0);//返回1
7. #endif
以上这些测试都是在VS2008系统中测试出来的,如果有谁发现HttpSendRequest发送的HTTP头结构文档及其它特点,还请告诉我,不胜感激