2013-06-18 2 views
7

Ситуация: 1) Мне нужно сделать HTTP [S] сетевых вызовов в C++ для Windows для нашей DLL. 2) Необходимо поддерживать по крайней мере, XP (я предполагаю, что SP3 нормально) 3) нет ATL, нет MFC, нет IEКак получить MSXML IXMLHTTPRequest для обработки перенаправления HTTP?

Вопрос: Я недавно перешел от Boost, CPP-Netlib с использованием IXMLHTTPRequest MSXML для нашего (очень простые) сетевые потребности в окнах. Хотя все, казалось, отлично работает, мы заметили, что перенаправления не работают. В 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 слишком низкий для моих потребностей).

Спасибо!

+0

Есть ли образец кода и образец URL, которые демонстрируют проблему? E_ACCESSDENIED, возвращенный из вызова «Отправить», кажется странным. –

ответ

2

Мне не пришлось это делать в течение длительного времени, поэтому этот ответ может быть немного устаревшим. Насколько я помню, политика перенаправления для IXMLHTTPRequest очень строгая. Является ли перенаправление с использованием того же источника, что и исходный запрос? Если это так, это может нарушить ограничения безопасности, которые вызывают вашу ошибку.

Если это проблема, попробуйте IServerXMLHTTPRequest.

+0

тест URL следующая http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf , который перенаправляет на http://mysite.science.uottawa.ca/rsmith43/Zombies.pdf У вас есть ссылка на строгую политику перенаправления? Я искал высоко и низко и не нашел никакой полезной информации по этой теме. Я также упомянул в своем первоначальном вопросе, что я попробовал IXMLHttpServerRequest, IXMLHttpServerRequest2 и MSXML v6, без изменений в поведении. В конце я сдался и переключился на WinHTTP. Прекрасно работает. – ryanb

+0

Я не могу найти ни одного места в документации, где фактически указана политика происхождения. Тем не менее, mathstat.uottawa.ca - это другое происхождение, чем mysite.science.uottawa.ca –

0

Я думаю, что это может быть потому, что ваш вызов IXMLHTTPRequest2::Open не проходит в экземпляре вашего класса IXMLHTTPRequest2Callback.

+0

Я кратко упомянул, что пробовал обратный вызов асинхронного запроса IXMLHttpRequest (версия 1). IXMLHTTPReqeuest2 обрабатывает перенаправление штрафа (sync или async), и мы используем его на WinRT, но этот код должен запускаться на XP, например, поэтому я использовал более старый файл IXMLHTTPRequest. – ryanb

Смежные вопросы