2013-06-18 10 views
7

Situation: 1) Ich muss HTTP [S] Netzwerkaufrufe in C++ unter Windows für unsere DLL machen. 2) Sie benötigen mindestens XP (ich denke, SP3 ist ok) 3) kein ATL, keine MFC, keine IEWie bekomme ich MSXML IXMLHTTPRequest zur Verarbeitung von HTTP-Weiterleitungen?

Frage zu unterstützen: ich vor kurzem wechselte von Boost-CPP-netlib zur Verwendung von MSXML des IXMLHTTPRequest für unsere (sehr einfach) Netzwerkanforderungen an Windows. Während alles gut zu funktionieren schien, haben wir bemerkt, dass Redirects nicht funktionieren. In fiddler bekomme ich ein HTTP 302, gefolgt von der zweiten erfolgreichen HTTP 200 Anfrage/Antwort.

Jedoch im tatsächlichen C++ Code bekomme ich E_ACCESSDENIED von IXMLHTTPRequest-> senden und der HTTP-Antwortcode ist Null. Also im Code habe ich keine Möglichkeit zu wissen, was wirklich passiert ist.

Da von Fiddler alles funktionierte, habe ich versucht, es async und Überprüfung der Rückruf, versuchte auch IXMLHttpServerRequest, IXMLHttpServerRequest2 und MSXML v6, aber keiner funktionierte.

Hinweis: Wir verwenden IXMLHttpRequest2 auf WinRT und das funktioniert gut (Umgang mit dem OnRedirect-Ereignis).

Gibt es trotzdem, MSXML IXMLHTTPRequest zu erhalten, Umleitungen zu behandeln?

Oder muss ich zu WinInet/WinSockets/WinHttp wechseln? Ich nehme an, ich muss WinHttp verwenden (da ich Windows Services/IIS unterstützen muss, was WinInet anscheinend nicht tut, und WinSockets ist zu niedrig für meine Bedürfnisse, denke ich).

Danke!

+0

Gibt es Beispielcode und Beispiel-URL, die das Problem veranschaulichen? Das E_ACCESSDENIED, das von dem Send-Aufruf zurückgegeben wird, scheint seltsam. –

Antwort

2

Ich habe das seit langer Zeit nicht mehr tun müssen, also könnte diese Antwort etwas veraltet sein. Soweit ich mich erinnere, ist die Redirect-Richtlinie für IXMLHTTPRequest sehr streng. Verwendet die Weiterleitung den gleichen Ursprung wie die ursprüngliche Anfrage? Wenn dies der Fall ist, kann dies die Sicherheitsbeschränkungen verletzen, die Ihren Fehler verursachen.

Wenn das in der Tat das Problem ist, versuchen Sie stattdessen IServerXMLHTTPRequest.

+0

Der Test-URL ist folgende http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf die http://mysite.science.uottawa.ca/rsmith43/Zombies.pdf zu Umleitungen Haben Sie eine Empfehlung für die strikte Redirect-Richtlinie? Ich suchte hoch und tief und konnte keine nützlichen Informationen zu diesem Thema finden. Ich erwähnte auch in meiner ursprünglichen Frage, dass ich IXMLHttpServerRequest, IXMLHttpServerRequest2 und MSXML v6 versuchte, ohne Verhalten zu ändern. Am Ende gab ich auf und wechselte zu WinHTTP. Funktioniert jetzt großartig. – ryanb

+0

Ich kann keinen einzigen Ort in der Dokumentation finden, wo die Herkunftsrichtlinie tatsächlich angegeben ist. Das heißt, mathstat.uottawa.ca ist eine andere Herkunft als mysite.science.uottawa.ca –

0

Ich denke, dass es sein könnte, weil Ihre IXMLHTTPRequest2::Open Anruf nicht in einer Instanz Ihrer IXMLHTTPRequest2Callback Klasse übergeben wird.

+0

Ich habe kurz erwähnt, dass ich versucht habe, die asml-Anfrage Callback (IXMLHttpRequest) (Version 1). IXMLHTTPRequest2 behandelt Redirect Fine (sync oder async), und wir verwenden es auf WinRT, aber der betreffende Code muss zum Beispiel auf XP ausgeführt werden, und so verwendete ich die ältere IXMLHTTPRequest. – ryanb

Verwandte Themen