如果定义了标头,则为CInternetSession :: OpenURL异常。如果没有,工作正常。为什么?

时间:2010-05-04 08:03:46

标签: c++ visual-c++ mfc

尝试使用标题记录我们的博客中的应用程序版本详细信息:

应该是一个单行...但由于某种原因,每当我为标题指定任何除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)然后它会很好,我看到请求来到我们的网站。但是,如果我传入自定义标题,为什么会失败呢?

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分开。