如何在htmlview中截获每次收到的报文 每次发送的报文在OnBeforeNavigate2中有,但是接收到的报文在哪里啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 报文?你得到的已经是http的request和response了。用winInet的函数可以得到。如果想得到报文需要自己用socket来编写http客户端。 在OnDocumentComplete会有提示你哪个url已经加裁完成,但是我要想得到这个具体内容该如何获取? 重载未公开函数DocumentComplete,查询sender的IWebBrowser2接口,获取其document属性。如果document支持IHTMLDocument2,你可以枚举网页元素或者查询document的IPersistStreamInit接口,把文档内容保存到用CreateStreamOnHGlobal创建的内存流 请问sender是在哪里得到的DocumentComplete如何实现? http://support.microsoft.com/kb/180366 sender的IWebBrowser2,如何进行查询啊,我试了一下总是返回失败void CMultiBrowserView::DocumentComplete(LPDISPATCH lpDisp, VARIANT FAR* URL){IHTMLDocument2 *pDocment = NULL;hr = pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDocment); 用如下方法是可以得到了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);} 另外如何在html显示之前就能拦截呢 你的代码没判断sender是不是frame你想自己重写http协议的处理程序? 如果想在显示之前进行处理,看样子只能自己来写了,不过感觉很复杂,好像session,cookie都要自己处理了 另外如何在html显示之前就能拦截呢在IE加载前得到HTML代码:http://blog.csdn.net/lion_wing/archive/2006/06/27/839134.aspx CRichEditCtrl高亮显示字符奇怪问题 Atl中的Ctring问题 关于动态添加的菜单栏变灰的问题 关于dll内存泄漏 求助,关于dom中的style 高手帮我分析一下,问题出在哪里? ■郁闷,弹出菜单在CDialog上正确,在CMainFrame里就错了??? 如何中止一个运行的程序(eg:notepad),给出代码好吗 Socket编程发送变成接收? vc6.0能不能在nt4.0下运行?谢谢! 从LeftView到DialogBar的问题 UDP-有点奇怪
如果document支持IHTMLDocument2,你可以枚举网页元素或者查询document的IPersistStreamInit接口,把文档内容保存到用CreateStreamOnHGlobal创建的内存流
void CMultiBrowserView::DocumentComplete(LPDISPATCH lpDisp, VARIANT FAR* URL)
{
IHTMLDocument2 *pDocment = NULL;
hr = pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDocment);
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);}
你想自己重写http协议的处理程序?
http://blog.csdn.net/lion_wing/archive/2006/06/27/839134.aspx