Comment faire pour que MSXML IXMLHTTPRequest gère les redirections HTTP?

Situation: 1) Je dois effectuer des appels réseau HTTP [S] en C ++ sous Windows pour notre DLL. 2) Besoin de prendre en charge au moins XP (je suppose que SP3 est ok) 3) pas ATL, pas de MFC, pas d’IE

Question: Je suis récemment passé de Boost cpp-netlib à l’utilisation de IXMLHTTPRequest de MSXML pour nos besoins réseau (très simples) sur Windows. Alors que tout semblait fonctionner correctement, nous avons remarqué que les redirections ne fonctionnaient pas. En fiddler, je reçois un HTTP 302, suivi de la deuxième requête / réponse HTTP 200 réussie.

Cependant, dans le code C ++, j’obtiens E_ACCESSDENIED de IXMLHTTPRequest-> Send et le code de réponse HTTP est zéro. Donc, dans le code, je n’ai aucun moyen de savoir ce qui s’est réellement passé.

Puisque tout fonctionnait de Fiddler, j’ai essayé de le rendre asynchrone et de vérifier le rappel, j’ai également essayé IXMLHttpServerRequest, IXMLHttpServerRequest2 et MSXML v6, mais rien n’a fonctionné.

Note: Nous utilisons IXMLHttpRequest2 sur WinRT et cela fonctionne très bien (en gérant l’événement OnRedirect).

Y at-il de toute façon pour obtenir IXMLHTTPRequest de MSXML pour gérer les redirections?

Ou dois-je passer à WinInet / WinSockets / WinHttp? Je suppose que je dois utiliser WinHttp (car je dois prendre en charge Windows Services / IIS, ce que WInInet ne semble pas faire, et WinSockets est trop faible pour répondre à mes besoins).

Merci!

Je n’ai pas eu à le faire depuis longtemps, donc cette réponse pourrait être un peu datée. Si je me souviens bien, la politique de redirection pour IXMLHTTPRequest est très ssortingcte. La redirection utilise-t-elle la même origine que la demande d’origine? Si tel est le cas, cela peut violer les ressortingctions de sécurité qui provoquent votre erreur.

Si tel est le cas, essayez plutôt IServerXMLHTTPRequest.

Je pense que cela pourrait être parce que votre appel IXMLHTTPRequest2::Open ne passe pas dans une instance de votre classe IXMLHTTPRequest2Callback .