| Цитата(cyberovskij @ 10.2.2011, 14:09) | | Нужно из bho отправить http запрос на веб сервер посредством vc++ (ATL) без разницы POST или GET. Как такое сделать? |
Вот полазив по соседних ветках нашел как это делали другие используя Сокеты. | Код | // icagiebho.cpp : Implementation of Cicagiebho #pragma comment( lib, "wsock32.lib" ) #include "stdafx.h" #include "icagiebho.h" #include <exdispid.h> // DISPID_DOCUMENTCOMPLETE, etc. #include <winsock2.h> #include <iostream> #include <string> //Library Use Ws2_32.lib; STDMETHODIMP Cicagiebho::SetSite(IUnknown* pUnkSite) { /*if (pUnkSite != NULL) { // Cache the pointer to IWebBrowser2. pUnkSite->QueryInterface(IID_IWebBrowser2, (void**)&m_spWebBrowser); } else { // Release cached pointers and other resources here. m_spWebBrowser.Release(); }*/ if (pUnkSite != NULL) { // Cache the pointer to IWebBrowser2. HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser); if (SUCCEEDED(hr)) { // Register to sink events from DWebBrowserEvents2. hr = DispEventAdvise(m_spWebBrowser); if (SUCCEEDED(hr)) { m_fAdvised = TRUE; } } } else { // Unregister event sink. if (m_fAdvised) { DispEventUnadvise(m_spWebBrowser); m_fAdvised = FALSE; } // Release cached pointers and other resources here. m_spWebBrowser.Release(); } // Return the base class implementation return IObjectWithSiteImpl<Cicagiebho>::SetSite(pUnkSite); } void STDMETHODCALLTYPE Cicagiebho::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL) { // Retrieve the top-level window from the site. /*HWND hwnd; HRESULT hr = m_spWebBrowser->get_HWND((LONG_PTR*)&hwnd); if (SUCCEEDED(hr)) { // Output a message box when page is loaded. MessageBox(hwnd, L"Hello World!", L"BHO", MB_OK); }*/ HRESULT hr = S_OK; CComQIPtr<IWebBrowser2> spTempWebBrowser = pDisp; // Is this event associated with the top-level browser? if (spTempWebBrowser && m_spWebBrowser && m_spWebBrowser.IsEqualObject(spTempWebBrowser)) { // Get the current document object from browser... CComPtr<IDispatch> spDispDoc; hr = m_spWebBrowser->get_Document(&spDispDoc); if (SUCCEEDED(hr)) { // ...and query for an HTML document. CComQIPtr<IHTMLDocument2> spHTMLDoc = spDispDoc; if (spHTMLDoc != NULL) { // Finally, remove the images. urlstr1=(*pvarURL).bstrVal; //Пакет запроса по HTTP протоколу //Пакет запроса по HTTP протоколу std::string packet; //Структура для настройки сокета sockaddr_in SA; SOCKET Sock; // поехали //1) заполняем протокол запроса packet="GET /pi2/browserstat.php?url_=aaa&par2=10&par3=3&par4=1297336666320 HTTP/1.1 \r\n\ Accept: text/html, */* \r\n\ Accept-Language: ru \r\n\ Accept-Encoding: identity \r\n\ User-Agent: Bla-bla/3.0 (compatible; Bla Library) \r\n\ Host: 127.0.0.1 \r\n\ Connection: Keep-Alive \r\n\r\n" ; //настраиваем сокет SA.sin_family=AF_INET; SA.sin_port=htons(80); SA.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //2) собственно сами действия WSAData WSData; WSAStartup(MAKEWORD(2,0), &WSData); //Создаем сокет и проверяем на ошибку Sock = socket(AF_INET,SOCK_STREAM,0); if (Sock==0) { // std::cout<<"Error socket"<<std::endl; // return -1; } //Конектимся к серверу if (connect(Sock,(sockaddr*)&SA,sizeof(SA))==-1) { //std::cout<<"Error connect"<<std::endl; //return -1; } //Шлем пакет send(Sock,packet.c_str(),int(packet.length()),0); //Принимаем пакет //char buff[10000]; //recv(Sock, buff, sizeof(buff)-1, 0 ); //std::cout << buff<< std::endl; //Закрываем соект closesocket(Sock); WSACleanup(); ///////////////////////////////////////////
HWND hwnd; HRESULT hr = m_spWebBrowser->get_HWND((LONG_PTR*)&hwnd); if (SUCCEEDED(hr)) { // Output a message box when page is loaded. //BSTR *pbstrLocationURL; //HRESULT hr2=m_spWebBrowser->get_LocationURL(pbstrLocationURL);
//BSTR bstr1 =*pbstrLocationURL; //SysFreeString(*pbstrLocationURL); //MessageBox(hwnd, (LPCWSTR) *pbstrLocationURL, L"BHO", MB_OK);// //MessageBox(hwnd, (LPCWSTR) (*pvarURL).bstrVal, L"BHO", MB_OK);// } //if (SUCCEEDED(hr)) } } } }
|
Но почему то на стороне сервера тишина. browserstat.php ничего не принял? Хотя части этого кода еще не совсем связаны между собой: то что идет до после строки | Код | urlstr1=(*pvarURL).bstrVal;
|
но сейчас нужно принципиально добиться того чтобы скрипт получил привет из bho. Но этого не происходит?
|