c++ - CAtlHttpClient - 导航到 IP6 地址似乎不起作用

标签 c++ http atl ipv6

我正在使用 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/

相关文章:

javascript - 在 node.js 中解析查询字符串

c++ - MIDL 更改接口(interface)名称

c++ - 神秘的全局变量 - COM/STA 单元对象

c++ - .lib 不是有效的 Win32 应用程序 - Visual Studio 2015

HTTP、HTTPS、共享 SSL 和 SEO

c++ - unique_ptr 相对于 auto_ptr 的优势?

angularjs - AngularJS-无法访问$ http内的外部变量

c++ - 如何使用 IDocHostUIHandler::ShowContextMenu 修改 Internet Explorer 的上下文菜单?

c++ - 使用 Windows API 检测网卡和以太网设备的 IP 地址

C++ Winsock send,recv - 它们是如何工作的