每次发送的报文在OnBeforeNavigate2中有,但是接收到的报文在哪里啊

解决方案 »

  1.   

    报文?你得到的已经是http的request和response了。用winInet的函数可以得到。如果想得到报文需要自己用socket来编写http客户端。
      

  2.   

    在OnDocumentComplete会有提示你哪个url已经加裁完成,但是我要想得到这个具体内容该如何获取?
      

  3.   

    重载未公开函数DocumentComplete,查询sender的IWebBrowser2接口,获取其document属性。
    如果document支持IHTMLDocument2,你可以枚举网页元素或者查询document的IPersistStreamInit接口,把文档内容保存到用CreateStreamOnHGlobal创建的内存流
      

  4.   

    请问sender是在哪里得到的DocumentComplete如何实现?
      

  5.   

    http://support.microsoft.com/kb/180366
      

  6.   

    sender的IWebBrowser2,如何进行查询啊,我试了一下总是返回失败
    void CMultiBrowserView::DocumentComplete(LPDISPATCH lpDisp, VARIANT FAR* URL)
    {
    IHTMLDocument2 *pDocment = NULL;
    hr = pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDocment);

      

  7.   

    用如下方法是可以得到了IHTMLDocument2,并得到了网页源代码,但是发现多Frame结构的网页向服务器发出的post请求,在DocumentComplete,中网页显示为空,与用sniffer截获的不同。
    void CMultiBrowserView::DocumentComplete(LPDISPATCH lpDisp, VARIANT FAR* URL)
    {
     
      CComQIPtr<IWebBrowser2>   pIE(lpDisp);   
      CComQIPtr<IDispatch>   pHTMLDocDisp;   
      pIE->get_Document(&pHTMLDocDisp);   
      CComQIPtr<IHTMLDocument2>   pHTMLDoc(pHTMLDocDisp);   
    CString refString;
      if(pHTMLDoc!=NULL)
      {
      
    CComPtr<IDispatch> spDisp; 
    pIE->get_Document(&spDisp);
    if (spDisp != NULL)
    {
    HGLOBAL hMemory;
    hMemory = GlobalAlloc(GMEM_MOVEABLE, 0);
    if (hMemory != NULL)
    {
    CComQIPtr<IPersistStreamInit> spPersistStream = spDisp;
    if (spPersistStream != NULL)
    {
    CComPtr<IStream> spStream;
    if (SUCCEEDED(CreateStreamOnHGlobal(hMemory, TRUE, &spStream)))
    {
    spPersistStream->Save(spStream, FALSE); LPCSTR pstr = static_cast<LPCSTR>(GlobalLock(hMemory));
    if (pstr != NULL)
    {
    // Stream is always ANSI, but CString
    // assignment operator will convert implicitly.  
    TRY
    {
    refString = pstr;
    }
    CATCH_ALL(e)
    {
     
     
    }
    END_CATCH_ALL  
    GlobalUnlock(hMemory);
    }
    else
    {
    GlobalFree(hMemory);
    }
    }
    else
    {
    GlobalFree(hMemory);
    }
    }
    else
    {
    GlobalFree(hMemory);
    }
    }
    }
    refString.Replace(""," "); TRACE("\r\n[DocumentComplete ] %s\r\n[souce %ld ]\r\n%s\r\n",(CString)URL->bstrVal,refString.GetLength(),(CString)refString);}
      

  8.   

    另外如何在html显示之前就能拦截呢
      

  9.   

    你的代码没判断sender是不是frame
    你想自己重写http协议的处理程序?
      

  10.   

    如果想在显示之前进行处理,看样子只能自己来写了,不过感觉很复杂,好像session,cookie都要自己处理了
      

  11.   

    另外如何在html显示之前就能拦截呢在IE加载前得到HTML代码:
    http://blog.csdn.net/lion_wing/archive/2006/06/27/839134.aspx