7

情况: 1) 我需要在 Windows 上为我们的 DLL 使用 C++ 进行 HTTP[S] 网络调用。2) 至少需要支持 XP(我猜 SP3 还可以) 3) 没有 ATL,没有 MFC,没有 IE

问:我最近从 Boost cpp-netlib 切换到使用 MSXML 的 IXMLHTTPRequest 来满足我们在 Windows 上(非常简单)的网络需求。虽然一切似乎都很好,但我们注意到重定向不起作用。在提琴手中,我得到一个 HTTP 302,然后是第二个成功的 HTTP 200 请求/响应。

然而,在实际的 C++ 代码中,我从 IXMLHTTPRequest->Send 得到 E_ACCESSDENIED 并且 HTTP 响应代码为零。所以在代码中我无法知道实际发生了什么。

由于从 Fiddler 开始一切正常,我尝试使其异步并检查回调,还尝试了 IXMLHttpServerRequest、IXMLHttpServerRequest2 和 MSXML v6,但都没有奏效。

注意:我们在 WinRT 上使用 IXMLHttpRequest2 并且效果很好(处理 OnRedirect 事件)。

有没有办法让 MSXML 的 IXMLHTTPRequest 处理重定向?

还是我需要切换到 WinInet/WinSockets/WinHttp?我认为我需要使用 WinHttp(因为我需要支持 Windows 服务/IIS,而 WInInet 显然不支持,而且 WinSockets 对于我的需求来说太低了)。

谢谢!

4

2 回答 2

2

我已经很长时间没有这样做了,所以这个答案可能有点过时了。我记得,IXMLHTTPRequest 的重定向策略非常严格。重定向是否使用与原始请求相同的来源?如果是这样,那可能会违反导致您的错误的安全限制。

如果这确实是问题所在,请改用 IServerXMLHTTPRequest。

于 2014-03-26T17:34:19.537 回答
0

我认为这可能是因为你的IXMLHTTPRequest2::Open调用没有传入你的IXMLHTTPRequest2Callback类的实例。

于 2014-03-21T01:00:34.067 回答