我正在使用 ATL Server 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 地址吗?
或者我不允许在 Navigate 函数中指定 IP 地址,我是否应该始终使用主机名并希望客户端始终能够解析主机名?
最佳答案
在我的 ATL 版本中(包含在 Visual Studio 2005 中),URL 是用 CUrl 帮助器类解析的;该类似乎不支持 IPv6 地址。也许这是在更新的版本中修复的?如果没有,您可以手动构建一个 CUrl 对象并将其传递给重载的 Navigate() 方法。
关于c++ - CAtlHttpClient - 导航到 IP6 地址似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5548859/