CAtlHttpClient - переход на IP6-адрес не работает - PullRequest
1 голос
/ 05 апреля 2011

Я использую сервер ATL CAtlHttpCLient для отправки HTTP-запросов на сервер.

В основном мой код выглядит так:

ATL::CAtlHttpClient client;
ATL::CAtlNavigateData navigateData;
navigateData.SetSocketTimeout(60000);
navigateData.SetMethod(ATL_HTTP_METHOD_POST);
BX_TString jmfmime = "application/vnd.cip4-jmf+xml";
navigateData.SetPostData((BYTE*) msg.c_str(), msg.length(), jmfmime.c_str());

client.Navigate("http://[fe80::21a:a0ff:fec1:5917%6]:8090/someextrastuff", &navigateData);

Когда я использую IP4-адрес для подключения, все работает как лучше. Однако функция навигации, похоже, не работает для адресов IP6.

Внутренне символы '[' и ']' не считаются допустимыми символами в URL, и URL преобразуется во что-то подобное http://%5bfe80::21a:a0ff:fec1:5917%6%5d:8090/someextrastuff. В результате URL не может быть проанализирован.

Я понял, что CAtlHttpClient должен поддерживать адреса как IP4, так и IP6. Похоже, я что-то упустил.

Должен ли я указать IP6-адрес другим способом?

Или мне не разрешено указывать IP-адрес в функции навигации, и я должен всегда использовать имя хоста и надеяться, что клиент всегда сможет разрешить имя хоста?

1 Ответ

1 голос
/ 05 апреля 2011

В моей версии ATL (входит в состав Visual Studio 2005) URL-адрес анализируется с помощью вспомогательного класса CUrl; этот класс не поддерживает адреса IPv6. Возможно, это исправлено в более поздних версиях? Если нет, вы можете вручную создать объект CUrl и передать его перегруженному методу Navigate ().

...