Как получить MSXML IXMLHTTPRequest для обработки перенаправлений HTTP?
Ситуация: 1) Мне нужно сделать сетевые вызовы HTTP[S] в C++ на Windows для нашей DLL. 2) Нужно поддерживать хотя бы XP (я думаю, SP3 в порядке) 3) нет ATL, нет MFC, нет IE
Вопрос: Я недавно переключился с Boost cpp-netlib на использование IXMLHTTPRequest MSXML для наших (очень простых) сетевых потребностей в Windows. Хотя казалось, что все работает отлично, мы заметили, что перенаправления не работают. В Fiddler я получаю HTTP 302, а затем второй успешный запрос / ответ HTTP 200.
Однако в реальном коде C++ я получаю E_ACCESSDENIED из IXMLHTTPRequest->Send, а код ответа HTTP равен нулю. Так что в коде у меня нет возможности узнать, что на самом деле произошло.
Поскольку из Fiddler все работало, я попытался сделать его асинхронным и проверить обратный вызов, также попробовал IXMLHttpServerRequest, IXMLHttpServerRequest2 и MSXML v6, но ни один не работал.
Примечание: мы используем IXMLHttpRequest2 на WinRT, и это прекрасно работает (обработка события OnRedirect).
Есть ли способ получить IXMLHTTPRequest MSXML для обработки перенаправлений?
Или мне нужно переключиться на WinInet/WinSockets/WinHttp? Я так понимаю, мне нужно использовать WinHttp (поскольку мне нужно поддерживать Windows Services / IIS, чего, по-видимому, нет в WInInet, а WinSockets слишком низкий уровень для моих нужд).
Спасибо!
2 ответа
Я не должен был делать это в течение долгого времени, поэтому этот ответ может быть немного устаревшим. Насколько я помню, политика перенаправления для IXMLHTTPRequest очень строгая. Перенаправление использует тот же источник, что и исходный запрос? Если это так, это может нарушить ограничения безопасности, которые вызывают вашу ошибку.
Если это на самом деле проблема, попробуйте вместо этого IServerXMLHTTPRequest.
Я думаю, что это может быть потому, что ваш IXMLHTTPRequest2::Open
вызов не проходит в случае вашего IXMLHTTPRequest2Callback
учебный класс.