CInternetSession :: OpenURL исключение, если определены заголовки. Работает нормально, если нет. Зачем? - PullRequest
0 голосов
/ 04 мая 2010

Попытка записать сведения о версии приложения в наших блогах с помощью заголовков:

Должно быть одним символом. Но по какой-то причине всякий раз, когда я указываю что-либо, кроме 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 (например, pass in NULL, -1), тогда он проходит нормально, и я вижу, что запрос поступил на наш сайт. Но почему не получается, если я передаю пользовательские заголовки?

1 Ответ

0 голосов
/ 04 мая 2010

Ваш 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 ().

РЕДАКТИРОВАТЬ: Другая возможность состоит в том, что вызов не удается, потому что заголовки, кажется, не в каноническом формате: в соответствии со спецификацией HTTP 1.1, они должны быть в формате «имя: значение», и каждый заголовок должен быть отделен от следующего с помощью CRLF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...