【问题标题】:CAtlHttpClient - Navigate to an IP6 address seems not to workCAtlHttpClient - 导航到 IP6 地址似乎不起作用
【发布时间】:2011-04-05 07:56:41
【问题描述】:

我正在使用 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 地址,我应该始终使用主机名并希望客户端始终能够解析主机名吗?

【问题讨论】:

    标签: c++ http atl ipv6


    【解决方案1】:

    在我的 ATL 版本(包含在 Visual Studio 2005 中)中,URL 使用 CUrl 帮助器类进行解析;该类似乎不支持 IPv6 地址。也许这在更新的版本中已修复?如果没有,您可以手动构建一个 CUrl 对象并将其传递给重载的 Navigate() 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 2019-01-19
      • 2016-06-11
      • 1970-01-01
      相关资源
      最近更新 更多