Как получить 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 учебный класс.

Другие вопросы по тегам