尝试使用标题记录我们的博客中的应用程序版本详细信息:
应该是一个单行...但由于某种原因,每当我为标题指定任何除NULL之外它会导致异常(InternetOpenUrl()调用返回NULL) - 任何人都能解释原因吗?
CInternetSession internet;
CHttpFile * pHttpFile;
CString headers;// = APPLICATION_SUITE_NAME;
DWORD dwHeadersLength = -1;
headers.Format("%s %s %s\n",APPLICATION_SUITE_NAME,SHORT_APPLICATION_VERSION,BUILDNO_STR);
pHttpFile =(CHttpFile *) internet.OpenURL(lpszURL, 1, INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_DONT_CACHE, headers, dwHeadersLength);
没有标题,dwHeadersLength参数(例如传递NULL,-1)然后它会很好,我看到请求来到我们的网站。但是,如果我传入自定义标题,为什么会失败呢?
答案 0 :(得分:0)
你的CString是否解析为CStringA或CStringW?如果是后者(即宽字符),这里有一点来自MSDN(http://msdn.microsoft.com/en-us/library/aa384247%28VS.85%29.aspx):
如果 dwHeadersLength是-1L和lpszHeaders 不是NULL,以下是 发生:如果调用HttpSendRequestA, 该函数假定为lpszHeaders 是零终止(ASCIIZ),和 长度计算。如果 调用HttpSendRequestW, 功能失败了 ERROR_INVALID_PARAMETER。
我提到了HttpSendRequest(),因为事实上,CInternetSession :: OpenURL()调用了InternetOpenUrl(),其lpszHeaders参数的文档将您发送到HttpSendRequest()的doc页面。
编辑:另一种可能是调用失败,因为标头似乎不是规范格式:根据HTTP 1.1规范,它们应该是“name:value”格式,每个标题应与CRLF分开。