Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отправка http из bho 
:(
    Опции темы
cyberovskij
Дата 10.2.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.5.2010

Репутация: нет
Всего: нет



Нужно из bho отправить http запрос на веб сервер посредством  vc++ (ATL) без разницы POST  или GET. Как такое сделать?
PM MAIL   Вверх
cyberovskij
Дата 10.2.2011, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.5.2010

Репутация: нет
Всего: нет



Цитата(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. Но этого не происходит?
PM MAIL   Вверх
xvr
Дата 11.2.2011, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(cyberovskij @  10.2.2011,  15:59 Найти цитируемый пост)
    SA.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

У вас сервер на локальной машине живет? Или все же там должен быть реальный IP?

PM MAIL   Вверх
cyberovskij
Дата 16.2.2011, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.5.2010

Репутация: нет
Всего: нет



Цитата(xvr @ 11.2.2011,  13:13)
Цитата(cyberovskij @  10.2.2011,  15:59 Найти цитируемый пост)
    SA.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

У вас сервер на локальной машине живет? Или все же там должен быть реальный IP?

на локальной.
PM MAIL   Вверх
xvr
Дата 16.2.2011, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Тогда все должно быть правильно. Попробуйте подключиться telnet'ом на 80 порт на localhost и скормить ему туда ваши строки (вручную).

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1115 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.