Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: G. Россия  
Дата: 03.03.05 06:52
Оценка:
Доброго! Возможно вопрос туп... Но мне нужна помощь...

Использую компонент браузера IWebBrowser2 для отправки методом POST XML файла на сервер, в ответ получаю другой XML файл ( ответ сервера ), но почему-то не могу получить к нему доступ... Приведу упрощённый кусок кода, заранее прошу прощения за весь этот гемор с указателями ( работаю на ANSI C ):

if ( FAILED ( hr = CoInitialize( NULL ) ) ) exit( 1 ); /* Инициализируемся */
if ( FAILED ( hr = CoCreateInstance( &CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, &IID_IWebBrowser2, ( void** ) &pWebBrowser ) ) ) exit( 1 ); /* Работа с IWebBrowser2 */

bstrURL = SysAllocString( OLESTR( "http://176.31.0.100:770/" ) ); /* Адрес сервера, с которым работаю */
bstrHeaders = SysAllocString( OLESTR( "Content-Type: text/xml\r\n" ) ); /* Посылать буду XML данные */

V_VT( &vHeaders ) = VT_BSTR; /* Подготовка хидеров */
V_BSTR( &vHeaders ) = bstrHeaders;

/* Моя функция — в vPostData засовываем передаваемый XML */
GetPostData( &vPostData, "<?xml version=\"1.0\" encoding=\"windows-1251\"?>..." );

pWebBrowser->lpVtbl->put_Visible( pWebBrowser, VARIANT_TRUE ); /* Для нагладности делаем видимым окно браузера */

if ( FAILED ( hr = pWebBrowser->lpVtbl->Navigate( pWebBrowser, bstrURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders ) ) ) exit( 1 ); /* Отправляем данные, и получаем ответ; полученная XML отображается в окне браузера */

wait_page_complete( pWebBrowser, 10000, 100 ); /* Жду полного завершения загрузки данных */

/* Добираюсь до принятого содержимого */
if ( FAILED ( hr = pWebBrowser->lpVtbl->get_Document( pWebBrowser, &lpDispatch ) ) ) exit( 1 );

/* Пытаюсь работать с полученной XML, но на этом этапе в pXMLDoc возвращается NULL — т.е. ошибка */
if ( FAILED ( hr = lpDispatch->lpVtbl->QueryInterface( lpDispatch, &IID_IXMLDOMDocument2, ( void** ) &pXMLDoc ) ) ) exit( 1 );

Пожалуйста, объясните мне, почему на последнем этапе в pXMLDoc возвращается NULL? Что я делаю не правильно? Хотя, если с помощью компоненты IWebBrowser2 получать обычный HTML файл, делать get_Document и затем через IHTMLDocument2 работать с ним — всё отлично... Проясните ситуацию, пожалуйста...
Re: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: al Россия  
Дата: 03.03.05 09:35
Оценка:
Здравствуйте, G., Вы писали:

G.>Доброго! Возможно вопрос туп... Но мне нужна помощь...


Так ведь WebBrowser — это не XML-парсер. И он не поддерживает IXMLDocument2. Наверяка та HRESULT == E_NOINTERFACE.

> Приведу упрощённый кусок кода, заранее прошу прощения за весь этот гемор с указателями ( работаю на ANSI C ):


Зачем так жестоко поступать с самим собой? С++ и CComPtr<> оч. сильно упрощают жизнь.


Re[2]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: G. Россия  
Дата: 03.03.05 09:52
Оценка:
Здравствуйте, al, Вы писали:

al>Так ведь WebBrowser — это не XML-парсер. И он не поддерживает IXMLDocument2. Наверяка та HRESULT == E_NOINTERFACE.


А не подскажите, в какую сторону копать? Мне в принципе парсить не нужно XML на данном этапе, да и не даст IE походу... Как в текущей ситуации сохранить полученные XML данные в файл на диске? То есть, я сделал get_Document, у меня есть LPDISPATCH для загруженных данных, как их сохранить?
Re[3]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: al Россия  
Дата: 03.03.05 11:39
Оценка:
А зачем для этого использовать WebBrowser? Используйте XMLParser (тот-же MSXML), который умеет сам загружать XML по http и сохранять его на диск.

И расскажите, зачем вам Ansi-C? Для переносимости? И куда Вы собрались код, использующий IE и COM переносить?


Re[4]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: G. Россия  
Дата: 03.03.05 11:49
Оценка:
Здравствуйте, al, Вы писали:

al>А зачем для этого использовать WebBrowser? Используйте XMLParser (тот-же MSXML), который умеет сам загружать XML по http и сохранять его на диск.


Да, да... Такая идея была, но XMLParser не умеет общаться по SSL... Или я ошибаюсь? Просто все эти данные мне необходимо будет пересылать с использованием SSL...

al>И расскажите, зачем вам Ansi-C? Для переносимости? И куда Вы собрались код, использующий IE и COM переносить?


Да, ваше замечание весомо... Я уже исправил этот недостаток... В общем-то мне и не к чему ANSI С...
Re[5]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: al Россия  
Дата: 03.03.05 12:09
Оценка:
G.>Да, да... Такая идея была, но XMLParser не умеет общаться по SSL... Или я ошибаюсь? Просто все эти данные мне необходимо будет пересылать с использованием SSL...

А Вы попробуйте. MSXML использует те же обработчики протоколов, что и MSHTML.

Если ничего не получится, то в WebBeowser нужно использовать свойство body.innerText — в нем и будет весь загруженный в WebBrowser XML (если по нему не пройдется XSLT)


Re[6]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: G. Россия  
Дата: 03.03.05 12:45
Оценка:
Здравствуйте, al, Вы писали:

al>А Вы попробуйте. MSXML использует те же обработчики протоколов, что и MSHTML.


А вы не могли бы привести пример вызова CoCreateInstance для создания IXMLHTTPRequest?
Re[7]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: al Россия  
Дата: 03.03.05 13:30
Оценка:
Этого я не знаю


Re[6]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: G. Россия  
Дата: 03.03.05 15:58
Оценка:
Здравствуйте, al, Вы писали:

al>А Вы попробуйте. MSXML использует те же обработчики протоколов, что и MSHTML.


К сожалению XMLHTTPRequest не захотел гулять по https... Обидно...

al>Если ничего не получится, то в WebBeowser нужно использовать свойство body.innerText — в нем и будет весь загруженный в WebBrowser XML (если по нему не пройдется XSLT)


И тут вы правы — XSLT немного испоганил исходный XML... Добавил '+' и '-' как он делает это в окне эксплорера...

Не знаю, что делать... Может подкините идейку как гонять данные через https, не используя компонент эксплорера?
Re[7]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: al Россия  
Дата: 03.03.05 16:36
Оценка:
А просто метод LOAD XMLDocument'а не фурычит?

Если нет, то может стоит посмотреть в сторону XML Data Islands http://msdn.microsoft.com/library/en-us/xmlsdk/html/xmconXMLDataIslands.asp?frame=true ?


Re[7]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: askold  
Дата: 03.03.05 16:44
Оценка:
G.>Не знаю, что делать... Может подкините идейку как гонять данные через
G.>https, не используя компонент эксплорера?
... используя Wininet функции: InternetOpen, InternetConnect, HttpOpenRequest... ну и т.д.
Re[7]: Проблемы при работе с IWebBrowser2 и IXMLDOMDocument2
От: AndrewJD США  
Дата: 04.03.05 12:24
Оценка:
Здравствуйте, G., Вы писали:

al>>А Вы попробуйте. MSXML использует те же обработчики протоколов, что и MSHTML.

G.>К сожалению XMLHTTPRequest не захотел гулять по https... Обидно...
компонент эксплорера?

Попробуй через URLMoniker, они нормально ходят (вернее MSHTML через них ходит .
"For every complex problem, there is a solution that is simple, neat,
and wrong."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.