用IWebBrowser2接口的Navigate2方法实现Http POST传输的几个问题

sinat_30784251 2016-09-02 10:54:19
我要实现的时自动登录一个学习平台,需要的参数有 学校 学号 密码
用firebug抓取的网页登录信息如下:



然后我的代码如下

void CMFCApplication1Dlg::OnBnClickedBtngo()
{
LPCTSTR url = TEXT("http://cas.gaoxiaobang.com/");
LPCTSTR postData=TEXT("tenantId=717&username=120155555&password=135246") ;
//Get size of Post Data
int size = WideCharToMultiByte(CP_ACP, 0, postData, -1, 0, 0, 0, 0);

VARIANT vURL;
VARIANT vFlags;
VARIANT vPostData;
VARIANT vHeaders;
VARIANT vNull;

// Init
VariantInit(&vURL);
VariantInit(&vFlags);
VariantInit(&vPostData);
VariantInit(&vHeaders);
VariantInit(&vNull);

// Set value
vHeaders.vt = VT_BSTR;
vHeaders.bstrVal = SysAllocString(L"Content-Type: application/x-www-form-urlencoded\r\n");

vFlags.vt = VT_I4;
vFlags.lVal = navNoReadFromCache | navNoWriteToCache;

vURL.vt = VT_BSTR;
vURL.bstrVal = SysAllocString(url);

if (size > 1) {
// POST
char* pPostData = new char[size + 1];
WideCharToMultiByte(CP_ACP, 0, postData, -1, pPostData, size, 0, 0);

SAFEARRAY FAR* sfPost = NULL;
SAFEARRAYBOUND bound;
bound.cElements = (ULONG)(strlen(pPostData));
bound.lLbound = 0;
sfPost = SafeArrayCreate(VT_UI1, 1, &bound);

char* pChar = pPostData;
for (long lIndex = 0; lIndex < (signed)bound.cElements; lIndex++) {
SafeArrayPutElement(sfPost, &lIndex, (void*)((pChar++)));
}

vPostData.vt = VT_ARRAY | VT_UI1;
vPostData.parray = sfPost;
delete[] pPostData;
pPostData = NULL;
pChar = NULL;

m_web.Navigate2(&vURL, &vFlags, &vNull, &vPostData, &vHeaders);
}
else {
// GET
m_web.Navigate2(&vURL, &vNull, &vNull, &vNull, &vNull);
}

// Clear
VariantClear(&vURL);
VariantClear(&vFlags);
VariantClear(&vPostData);
VariantClear(&vHeaders);
VariantClear(&vNull);
}


账号密码不方便泄露,我这里随便贴的一个。执行代码后webbrowser只是跳转到了登录界面,并没有实现自动登录,麻烦大家看看我的代码哪里不对呢?
...全文
972 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
卢队长 2018-10-11
  • 打赏
  • 举报
回复
有个问题需要请教您一下,您怎么去获取到抓包工具里面的值的,通过js代码吗?
sinat_30784251 2016-09-03
  • 打赏
  • 举报
回复
大神们快来啊,拜托了各位亲
sinat_30784251 2016-09-03
  • 打赏
  • 举报
回复
引用 1 楼 CharlesSimonyi 的回复:
仔细看一下浏览器抓到的POST内容,除了tenantId=717&username=120155555&password=135246还有很多东西,_eventId,submit,lt,execution,hiddenView等,不要遗漏

您说的是这个吧?

我复制了这个还是没法
sinat_30784251 2016-09-03
  • 打赏
  • 举报
回复
引用 5 楼 sinat_30784251 的回复:
[quote=引用 4 楼 CharlesSimonyi 的回复:] 仔细看浏览器抓包中POST的URL,并不是http://cas.gaoxiaobang.com/
大神,你的代码中post的数据是怎么填的啊?我是按下面的数据post的,还是不成功啊!真的是麻烦您了!!! 只post username=151070447&password=1935301zg.com&tenantId = 736也不行,都是跳转到了登录界面,纠结啊 [/quote] 啊啊啊啊啊,犯了一个小错误,又可以了,谢谢大神啊
sinat_30784251 2016-09-03
  • 打赏
  • 举报
回复
引用 4 楼 CharlesSimonyi 的回复:
仔细看浏览器抓包中POST的URL,并不是http://cas.gaoxiaobang.com/



大神,你的代码中post的数据是怎么填的啊?我是按下面的数据post的,还是不成功啊!真的是麻烦您了!!!

只post username=151070447&password=1935301zg.com&tenantId = 736也不行,都是跳转到了登录界面,纠结啊
encoderlee 2016-09-03
  • 打赏
  • 举报
回复
仔细看浏览器抓包中POST的URL,并不是http://cas.gaoxiaobang.com/

encoderlee 2016-09-03
  • 打赏
  • 举报
回复
仔细看一下浏览器抓到的POST内容,除了tenantId=717&username=120155555&password=135246还有很多东西,_eventId,submit,lt,execution,hiddenView等,不要遗漏

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧