MFC来编写一个POST表单的问题

qjzl2008 2012-04-27 08:49:17
RT.

想用MFC做一个登陆的效果。网站是登陆界面是这样的。HTML的表单。POST后PHP来处理。

想用MFC与登陆网页建立会话后,POST表单。

可以用WinInet类来实现么?

或者有没有其他的方式来实现。或者其他好的想法。。不需要完整的代码。希望能够教一下思想或者有什么建议。


感谢回答。
...全文
370 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nexthero 2014-09-23
  • 打赏
  • 举报
回复
我也碰到同类的问题了,楼主最终解决了没有呢
gjj19890622 2013-10-17
  • 打赏
  • 举报
回复
楼主成功了么?我也出现和你一样的问题,能不能分享下?
pensivor 2013-08-02
  • 打赏
  • 举报
回复
很不错,正在弄
qjzl2008 2012-04-29
  • 打赏
  • 举报
回复
嗯好。谢谢各位了。。
向立天 2012-04-28
  • 打赏
  • 举报
回复
看看这篇文章会不会对你有帮助
http://blog.csdn.net/wangningyu/article/details/4681823
qjzl2008 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

最好还是用SOCKET API
配合抓包工具,模拟浏览器的行为,建立http的会话状态

使用API可以无穷扩展
使用MFC的INet相关类,扩展会受到限制
[/Quote]

请问下。用SOCKET应该怎么来做? 有没有相关文献?图书馆关于C++网络编程的书少的可怜,有的几本也是一笔带过
ok1234567 2012-04-28
  • 打赏
  • 举报
回复
最好还是用SOCKET API
配合抓包工具,模拟浏览器的行为,建立http的会话状态

使用API可以无穷扩展
使用MFC的INet相关类,扩展会受到限制
qjzl2008 2012-04-28
  • 打赏
  • 举报
回复
上面那个¥ 是发帖时候的手误。。。
qjzl2008 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

可以,用抓包抓个包,得到发送的数据,然后利用WININET的CInternetSession模拟提交即可。
[/Quote]


我用chrome登陆了一次把数据头的信息都获取了。。然后代码这边成功了。。但是又出现个问题。。。

貌似能够POST过去。。但是PHP不能处理似的。。

看下我的测试代码PHP上的

	$Acoount = "".$_POST['accout']."";
if($_POST['accout'] == '')
exit();
$filename1 = "$Acoount in.txt";
$filename2 = "$Acoount out.txt";

echo ¥Account //取回的信息,,这个显示的是正确的。。
echo $filename1//但是这个不正确,这个还是跟account一样,,,但是我用chrome登陆的时候显示的是正常的 ;



请问下这个是什么原因? 感觉就像 我那两个赋值语句没用似的

Eleven 2012-04-28
  • 打赏
  • 举报
回复
可以,用抓包抓个包,得到发送的数据,然后利用WININET的CInternetSession模拟提交即可。
qjzl2008 2012-04-28
  • 打赏
  • 举报
回复
函数没填完,声明是这样的 bool PostContent(CString strUrl, const CString &strPara, CString &strContent, CString &strDescript);
qjzl2008 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

用WinInet可以实现的,或者用SendRequest。
还可以直接用socket的send方法。你搜索下“VC http POST ”
[/Quote]


您好。 我这样来建立的连接,但是没成功,您能帮忙看下是什么问题吗?

 try{

strDescript = "提交成功完成!";
bool bRet = false;
CString strServer, strObject, strHeader, strRet;
unsigned short nPort;
DWORD dwServiceType;
if(!AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort))
{
strDescript = strUrl + "不是有效有网络地址!";
return false;
}
CInternetSession sess;//Create session

CHttpFile* pFile;
//////////////////////////////////////////////
CHttpConnection *pServer = sess.GetHttpConnection(strServer, nPort);
if(pServer == NULL)
{
strDescript = "对不起,连接服务器失败!";
return false;
}
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
if(pFile == NULL)
{
strDescript = "找不到网络地址" + strUrl;
return false;
}

// pFile -> AddRequestHeaders("Content-Type: text/xml; charset=utf-8");
pFile -> AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");
pFile -> AddRequestHeaders("Accept: */*");
pFile -> SendRequest(NULL, 0, (LPTSTR)(LPCTSTR)strPara, strPara.GetLength());

CString strSentence;
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bSuccess = pFile->QueryInfo(
HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
&dwStatus, &dwBuffLen);

if( bSuccess && dwStatus>= 200 && dwStatus<300)
{
char buffer[2049];
memset(buffer, 0, 2049);
int nReadCount = 0;
while((nReadCount = pFile->Read(buffer, 2048)) > 0)
{
strContent += buffer;
memset(buffer, 0, 2049);
}
bRet = true;
}
else
{
strDescript = "网站服务器错误" + strUrl;
bRet = false;
}
////////////////////////////////////////
pFile->Close();
sess.Close();
return bRet;
}
catch(...)
{
int nCode = GetLastError();
strDescript.Format("向服务器post失败!错误号:%d", nCode);
return false;
}




经过 SendRequest的时候就失败了。错误代码显示的12002.

请问下第三个参数应该怎么写?

网页端我是用HTML写的表单然后提交后转到PHP来处理,我的解析URL是应该填PHP的那个页面还是HTML的?

我的第三个参数是这样填写的"accout=qjzl2008@163.com&passwd=zhao"
这个对应的是我表单中的name。。但是还是异常了。请问是什么原因?
这几天课多没能及时的来处理帖子,见谅
fishion 2012-04-27
  • 打赏
  • 举报
回复
用WinInet可以实现的,或者用SendRequest。
还可以直接用socket的send方法。你搜索下“VC http POST ”

18,363

社区成员

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

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