`
netxdiy
  • 浏览: 680835 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

实现程序向网站的POST (MFC版)

 
阅读更多

<script type="text/javascript"><!-- google_ad_client = "pub-0241434510974184"; /* 博客文章广告728x90, */ google_ad_slot = "7316585398"; google_ad_width = 728; google_ad_height = 90; // --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

下面给个简单的源码:

#include <afxinet.h>

CString strHeader = "Content-Type: application/x-www-form-urlencoded";
CString strDataFormat = "class_id=1";

CInternetSession session;
CHttpConnection* pConnection = session.GetHttpConnection("http://daids.wordpress.com.cn");
CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("/post.html?"));
BOOL result = pFile->SendRequest(strHeader, (LPVOID)(LPCTSTR)strDataFormat, strDataFormat.GetLength());
TCHAR* szBuffer = new TCHAR[65535];

int nlen = pFile->Read(szBuffer, 65535);

szBuffer[65534]= '/0';

CFile f;
f.Open("d://1.txt",CFile::modeCreate|CFile::modeWrite);
f.Write(szBuffer, 65535);
f.Close();

参考:

Here is a snippet of code that uses the MFC WinInet classes to simulate a Form POST request:
CString strHeaders =
_T("Content-Type: application/x-www-form-urlencoded");
// URL-encoded form variables -
// name = "John Doe", userid = "hithere", other = "P&Q"
CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q");

CInternetSession session;
CHttpConnection* pConnection =
session.GetHttpConnection(_T("ServerNameHere"));
CHttpFile* pFile =
pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
_T("FormActionHere"));
BOOL result = pFile->SendRequest(strHeaders,
(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());


Without MFC, the same code translates to straight SDK calls as follows:
static TCHAR hdrs[] =
_T("Content-Type: application/x-www-form-urlencoded");
static TCHAR frmdata[] =
_T("name=John+Doe&userid=hithere&other=P%26Q");
statuc TCHAR accept[] =
_T("Accept: */*");

// for clarity, error-checking has been removed
HINTERNET hSession = InternetOpen("MyAgent",
INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"),
INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
HINTERNET hRequest = HttpOpenRequest(hConnect, "POST",
_T("FormActionHere"), NULL, NULL, accept, 0, 1);
HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));
// close any valid internet-handles

CString GetPageX(CString m_svr, CString m_page, CString m_formdat)
{

CString m_cont,//返回内容
m_err,//错误信息
s1;
//初始设置
CInternetSession lc_isession;
lc_isession.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,32000);
lc_isession.SetOption(INTERNET_OPTION_CONNECT_RETRIES,10);
lc_isession.SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000);
//连接
CHttpConnection *pcon = lc_isession.GetHttpConnection(m_svr,80,"admin","password");
CString FormDataType = _T("Content-Type: application/x-www-form-urlencoded");
//m_formdat=MyReplace(m_formdat,'+');
//异常处理
try
{
CHttpFile *http=pcon->OpenRequest("POST",m_page);
//SetCookie(m_cookie);
http->AddRequestHeaders("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, */*");
http->AddRequestHeaders("Accept-Language: zh-cn");
http->AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");
http->AddRequestHeaders("Accept-Encoding: gzip, deflate");
http->AddRequestHeaders("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)");
http->AddRequestHeaders("Connection: Keep-Alive");
http->AddRequestHeaders("Cache-Control: no-cache");
//http->AddRequestHeaders("Cookie: FirstLogon=D195593569A134;");
http->SendRequest(FormDataType,(LPVOID)(LPCTSTR)m_formdat,m_formdat.GetLength());
//lc_isession.GetCookie(m_cookie);
//AfxMessageBox(m_cookie);
CString mstr;
m_cont.Empty();
while(http->ReadString(mstr))
{
m_cont+=mstr+"/n";
}
m_cont.Replace("<br>","/r/n");
//m_cont即保存了返回内容
http->Close();
pcon->Close();
//AfxMessageBox(m_cont);
return m_cont;
}
catch (CInternetException* pEx)
{
char mcharerr[100];
pEx->GetErrorMessage(mcharerr,100);
m_err=mcharerr;
return m_cont;
}
}

CString GetPageX(CString m_svr, CString m_page, CString m_formdat)

其中的
m_svr是类似于这样的数据:www.163.com
m_page是类似于这样的数据:/login.asp
m_formdat 是类似于这样的表单数据:
name=yang&password=123

分享到:
评论

相关推荐

    MFC程序通过SendMessage或PostMessage实现进程间通信,实现很简单

    资源包含两个源程序,里面是借用MFC的消息通信实现简单的两个进程间通信,嗯主要是通过SendMessage或PostMessage,功能实现简单便捷。

    MFC通过SendMessage或PostMessage实现两个进程通信功能,实现很简单

    资源包含两个源程序,里面是借用MFC的消息通信实现简单的两个进程间通信,嗯主要是通过SendMessage或PostMessage,功能实现简单便捷。该资源是我想搞点分数,分多的大佬麻烦赏赐点,没分的可以找找我另一个同样的...

    HttpPost.rar,VS2013写的MFC中通过POST的JSON数据格式与WEB服务器通信调试程序

    VS2013写的MFC中通过POST的JSON数据格式与WEB服务器通信调试程序,可输入WEB上传地址,可在程序中修改JSON数据格式,其中含Unicode码转中文函数“UnicodeToChinese”可实现中英文混合Unicode码转Unicode字符集环境下...

    VC通过Http协议Get或Post方式与WebService通信,解析返回的Json

    本资源是一个封装类,采用异步方式解决了Wininet不能设置超时的问题,当前异步采用C++...MFC程序中通过HttpGet和HttpPost方式向WebService发送请求,WebService以Json的方式返回数据,MFC程序解析Json,得到指定数据。

    VC通过HttpGet和HttpPost方式与WebService通信,解析返回的Json

    MFC程序中通过HttpGet和HttpPost方式向WebService发送请求,WebService以Json的方式返回数据,MFC程序解析Json,得到指定数据。

    C++通过HTTP请求Post方式请求Json数据示例程序

    最近在工作中,由于合作商只提供uRL,我这边需要通过HTTP请求Get或Post方式请求Json数据,然后解析JSON格式,解析json我使用的第三方库rapidjson。开发环境是64位win7,VS2015。

    OpenGL-EPS-WMF-Output.rar_PostScript_emf_mfc metafile_opengl eps

    这个文章和附件中的代码实现如何将OpenGL/MFC程序输出到 encapsulated postscript (EPS)和Windows enhanced metafile (EMF)文件格式。最终的目标是能够产生可以编辑、打印和展示的适量图形文件。

    精通MFC (光盘) 源代码

    5.1 应用程序对象和MFC类库的交互 5.2 应用程序的初始化 5.3 消息循环 5.4 空闲处理 5.5 应用程序的退出 5.6 CWinApp提供的其他服务 5.6.1 外壳程序注册 5.6.2 文件管理器拖放 5.6.3 跟踪最近使用的文档 ...

    winpcap抓包并进行协议解析

    这是我本学期的网络编程课程设计,是基于winpcap的抓包程序,用MFC实现。 本程序基于winpcap,可以实现抓包类型的选择,如ARP,IP,TCP,UDP,ICMP。一般网上的抓包程序都是利用原始套接字,而基于原始套接字的抓包...

    http.rar_HTTP Get Post_c http文件下载_http protocol_http 分析_http 客户端

    用HTTP协议与WEB网站通信,实现基本的GET/POST消息交互。 主要功能: GET 网站上的页面、下载JPG文件等 POST 表单,包括上传文件。 分析部分常用的返回信息 主要用途: 实践GET/POST消息交互,根据网站的内容具体...

    实现OpenGL的PostScript和Wmf输出

    本文介绍了如何生成由OpenGL / MFC程序渲染的分辨率无关的3D网格版本,即如何将渲染结果导出为矢量格式,例如封装的Postscript(EPS)和Windows增强型图元文件(EMF)格式。 主要目标包括能够

    e语言-DDE动态数据交换

    客户机应用程序向当前所激活的服务器应用程序发送一条消息请求信息,服务器应用程序根据该信息作出应答,从而实现两个程序之间的数据交换。  在LabVIEW6.0以后的版本里,DDE还是可以使用的,但是NI更...

    VC++常用功能实例

    相关网站 7 设置窗口最大最小 7 设置窗口标题 7 去掉主菜单 7 修改应用程序图标 7 系统只能允许一个程序运行 7 在状态栏中添加时间 8 研究调用存储过程 8 得到本机的IP地址 9 vc调用chm文件 10 最高窗口的实现 10 ...

    VC++演示GET/POST发送请求的HTTP客户端

    内容索引:VC/C++源码,网络相关,HTTP  VC++演示GET/POST发送请求的HTTP客户端,为了演示HTTP的客户编写的,因此运行时必须在本机有开...程序会会自动发送用户选择的请求类型,并跟踪这个请求,并返回信息在主窗体上。

    VC++常用的共用函数100多页

    相关网站 7 设置窗口最大最小 7 设置窗口标题 7 去掉主菜单 7 修改应用程序图标 7 系统只能允许一个程序运行 7 在状态栏中添加时间 8 研究调用存储过程 8 得到本机的IP地址 9 vc调用chm文件 10 最高窗口的实现 10 ...

    学生信息管理系统VC++6.0

    设计要求实现如下功能: (1)建立学生信息数据,包括学号、姓名、性别、三科成绩、出生时间、年龄(必须计算得到)。 (2)使用继承的方法构造至少3个类,(即学生类——虚基类,本科生undergraduate,和研究生post ...

    易语言-DDE动态数据交换

    客户机应用程序向当前所激活的服务器应用程序发送一条消息请求信息,服务器应用程序根据该信息作出应答,从而实现两个程序之间的数据交换。 在LabVIEW6.0以后的版本里,DDE还是可以使用的,但是NI更提倡使用ActiveX...

    java面试题以及技巧

    │ │ 一些其它网站的java基础精华贴.txt │ │ 新建 文本文档.txt │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java....

    java面试题目与技巧1

    │ │ 一些其它网站的java基础精华贴.txt │ │ 新建 文本文档.txt │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java....

Global site tag (gtag.js) - Google Analytics