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

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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_yuetian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值