Webbrowser截获POST数据和模拟POST提交数据

来源:互联网 发布:python 模拟按键 下单 编辑:程序博客网 时间:2024/05/21 01:51

1,Webbrowser截获POST数据

void __stdcall CBrowserWeb::OnBeforeNavigate2(IDispatch *pDisp, VARIANT *url, VARIANT *Flags,VARIANT *TargetFrameName,VARIANT *PostData,VARIANT *Headers,VARIANT_BOOL *Cancel){ATLASSERT(m_spWebBrowser2);        /* 别的代码 *//* 以下此段为以字符串形式查看提交的POST数据*/if( PostData && PostData->vt == (VT_VARIANT|VT_BYREF) && PostData->pvarVal->vt != VT_EMPTY){//Cancel=VARIANT_TRUE;char *szTemp = NULL, *szPostData = NULL;long plLbound, plUbound;SAFEARRAY *parrTemp = PostData -> pvarVal->parray;SafeArrayAccessData(parrTemp , (void HUGEP **) &szTemp);SafeArrayGetLBound(parrTemp , 1, &plLbound);SafeArrayGetUBound(parrTemp , 1, &plUbound);szPostData = new char[plUbound - plLbound + 2];StrCpyA(szPostData, szTemp);//, plUbound - plLbound + 1);szPostData[plUbound-plLbound] = '\0';SafeArrayUnaccessData(parrTemp);Memo1->Lines->Add(szPostData);delete[] szPostData;}}

 

2,Webbrowser模拟POST提交数据,自己封装的Navigate2,直接调用此函数即可

HRESULT   CBrowserWeb::Navigate2(LPCSTR  szUrl,LPCSTR  szPostData)   {   HRESULT hr;        string strHeaders = "Content-Type: application/x-www-form-urlencoded\r\n";CComBSTR bstrURL(szUrl); CComVariant vHeaders;vHeaders.vt = VT_BSTR;vHeaders.bstrVal = SysAllocString(CComBSTR(strHeaders.c_str()).Detach());CComVariant vFlags;vFlags.vt = VT_I4;vFlags.lVal = navNoReadFromCache | navNoWriteToCache; CComVariant vTargetFrameName;//加上下面这段浏览器就会在一个新的窗口打开页面,几个参数都试过,//效果都一样,还没清楚是什么原因。 vTargetFrameName.vt = VT_BSTR;vTargetFrameName.bstrVal= SysAllocString(L"resultFrame");CComVariant vPostData;GetPostData(vPostData,szPostData);::Navigate(m_spWebBrowser2,bstrURL,   &vFlags,   &vTargetFrameName,   &vPostData,   &vHeaders);   return   TRUE;   }  HRESULT   CBrowserWeb::GetPostData(CComVariant &vPostData,LPCSTR  szPostData)   {   HRESULT   hr;   LPSAFEARRAY   psa; psa   =   SafeArrayCreateVector(VT_UI1,   0,   strlen(szPostData));   if   (!psa)    {   return   E_OUTOFMEMORY;   }LPSTR pPostData;hr   =   SafeArrayAccessData(psa,   (LPVOID*)&pPostData);   memcpy(pPostData,   szPostData,    strlen(szPostData));   hr   =   SafeArrayUnaccessData(psa);vPostData.vt =   VT_ARRAY   |   VT_UI1;     vPostData.parray =  psa; return   S_OK; }


 

0 0
原创粉丝点击