利用WinInet依RFC1867提交表单

By | 07月09日
Advertisement

CInternetSession m_Session("DigitalTitan");
CHttpConnection* pServer=NULL;
CHttpFile* pFile=NULL;
CString strServerName=m_ServerName;
INTERNET_PORT nPort=(INTERNET_PORT)atoi(m_ServerPort);
CString strURL=m_DesignFile;
try
{

pServer=m_Session.GetHttpConnection(strServerName,nPort);
//AfxMessageBox(strServerName,MB_ICONINFORMATION);
pFile=pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strURL,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
//AfxMessageBox(strURL,MB_ICONINFORMATION);

CString strBoundary="-----------------------------7d33a816d302b6";//分界线视CGI程序做响应改动.
pFile->AddRequestHeaders("Content-Type: multipart/form-data, boundary="+strBoundary);
pFile->AddRequestHeaders("Accept: **");

char* pBuf=new char[1024*10000];

//构造表单开始
FieldStruct* pFieldStruct=new FieldStruct;
POSITION CurrentPosition;
for(int iIndex=0;iIndex<m_FieldData.GetCount();iIndex++)
{
CurrentPosition=m_FieldData.FindIndex(iIndex);
pFieldStruct=(FieldStruct*)m_FieldData.GetAt(CurrentPosition);

strcat(pBuf,(LPTSTR)(LPCTSTR)strBoundary);

strcat(pBuf,"Content-Disposition: form-data;name=/"");
strcat(pBuf,(LPTSTR)(LPCTSTR)pFieldStruct->m_FieldName);
strcat(pBuf,"/"/r/n/r/n");
strcat(pBuf,(LPTSTR)(LPCTSTR)pFieldStruct->m_FieldValue);
strcat(pBuf,"/r/n");

strcat(pBuf,(LPTSTR)(LPCTSTR)strBoundary);
}
//构造表单结束
//
CStdioFile m_File;
BYTE* pFileBuf=new BYTE[1024];
CString strBuf;
DWORD dwRead;
strcat(pBuf,"Content-Disposition: form-data;name=/"FieldName/"/r/nfilename=/"FileName/"/r/n");
//AfxMessageBox(pBuf,MB_ICONINFORMATION);
if(m_File.Open(strTempDocPath,CFile::modeRead|CFile::typeBinary))
{
do
{
dwRead=m_File.Read(pFileBuf,1024);
for(int kIndex=0;kIndex<(int)dwRead;kIndex++)
{
char strChar=*(char*)(pFileBuf+kIndex);
if(strChar=='/0')
{
strBuf.Append("DigitalTitan",12);
}
else
{
strBuf.AppendChar(strChar);
}
}
}
while(dwRead>0);
m_File.Close();
}
//
DeleteFile(strTempDocPath);
strcat(pBuf,(LPTSTR)(LPCTSTR)strBuf);
strcat(pBuf,"/r/n");
strcat(pBuf,(LPTSTR)(LPCTSTR)strBoundary);
strcat(pBuf,"--");
//CString strBufLen;
//strBufLen.Format("长度:%d",strlen(pBuf));
//AfxMessageBox(strBufLen,MB_ICONINFORMATION);
if(pFile->SendRequest(NULL,0,(LPVOID)pBuf,strlen(pBuf))==0)
{
AfxMessageBox("网络异常...",MB_ICONINFORMATION);
}
else
{
}
pFile->Close();
pServer->Close();
}
catch(CInternetException* e)
{
char strErrorBuf[255];
e->GetErrorMessage(strErrorBuf,255,NULL);
AfxMessageBox(strErrorBuf,MB_ICONINFORMATION);
}
delete pFile;
delete pServer;
m_Session.Close();

Similar Posts:

  • 【转】 利用js得到任何网站表单提交的内容

    利用js得到任何网站表单提交的内容 有时我们可能想得到某网站上的表单提交时向服务器发送的数据,最简单的案例:在google搜索页面上点击"google搜索"按钮时,页面向服务器发送了什么? 我们可以分以下几步来完成: 1. 在页面中导入protoype.js 首先我们需要使用firefox来浏览网页,然后安装上firebug插件. 装好后通过firebug在页面中引入prototype.js,运行如下代码: view plaincopy to clipboardprint? var h

  • C# 利用WEBCLIENT 提交表单的方法

    // 要提交表单的URI字符串. string uriString = "http://www.xxx.com/Login.aspx"; // 要提交的字符串数据. string postString = "userName=user1&password=password1"; // 初始化 WebClient WebClient webClient = new WebClient(); webClient.Headers.Add("Content

  • PHP防止用户重复提交表单

    我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 那么如何规避这中重复提交表单的现象出现呢?我们可以从很多方面入手: 首先从前端做限制.前端JavaScript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效. 第二,我们可以在提交后做redirect页面重定向,即提交后跳

  • 使用ext2的form提交表单(非AJAX方式)

    http://beckrabbit.iteye.com/blog/132686 非ajax方式提交表单 var simple = new Ext.form.FormPanel({ url:'../userlogin., do' //实现非AJAX提交表单一定要加下面的两行! /*onSubmit: Ext.emptyFn, //onSubmit没有起作用 submit: function() { //有疑问的地方 this.getEl().dom.action='../userlogin.do'

  • Jquery提交表单 Form.js官方插件介绍

    2007-09-27 22:48 [JQuery框架应用]:form.js官方插件介绍 Form插件,支持Ajax,支持Ajax文件上传,功能强大,基本满足日常应用. 1.JQuery框架软件包下载 文件: jquery.rar 大小: 29KB 下载: 下载 2.Form插件下载 文件: jquery.form.rar 大小: 7KB 下载: 下载 3.Form插件的简单入门 第一步:先增加一个表单 < form id = "myForm" action = "com

  • 关于jquery提交表单实现ajax的简单例子

    jQuery的设计非常优雅,其源代码亦给人以美感,利用jQuery框架写出来的js既简练又能完美跨浏览器. jquery form插件是基于jQuery开发的一套能够利用ajax技术提交form的框架. 无论是jQuery,还是jquery form 都是老外写的. 通常的jQuery ajax提交写法如下: $.post("../user/user.do?d=checkPasswordOnUpdateByAjax",{old_password:old_password.val()},

  • PHP防止用户刷新页面,重复提交表单内容

    PHP Version 5.0.3RC2 通过不断刷新(Refresh or Reload)表单提交页面,可以重复提交表单内容.在PHP里如何避免这点? 弯路: 由于表单变量的内容由$_POST['name']引用,也许在处理完表单后,直接将$_POST['name']销毁(unset())即可.其实不然. 可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST['name'],刷新后,$_POST['name']还是会被赋值,一样有效. 解决: 利用PHP的Session.Sess

  • MFC实现自动填写表单与自动提交表单

    自动填写表单和自动提交表单可以利用在网页里自动注册,自动发帖,还可以让程序跟网页互动,这功能的使用还是比较广泛的,我说一下我一般用的自动填表跟自动提交表单的一些技巧,这些技巧,你可以结合一些扩展思维来做更多的事情,自动填写表单关键找到变量的name(搜索maxLength之后,就很容易找到变量的name),提交表单关键找到form的submitname和form的name. 1.新建一个Dlg对话框MFC程序 2.在对话框里面拉如一个WebBrowser控件ID改为IDC_EXPLORER,为其

  • JQuery ajax提交表单及表单验证+Jquery表单插件ajaxForm用法详解

    注:经过验证,formValidator只适合一个页面不超过一个表单的情况. 本例实现功能:通过ajax提交表单,并在提交表单前对表单的数据进行验证. 主要通过两个插件实现: 第一个: jQuery Form Plugin http://jquery.malsup.com/form 主要功能是ajax提交表单 第二个:jQuery formValidator 国产强大的表单验证插件. http://www.cnblogs.com/wzmaodong 最简单的例子如下: <html> <h

  • 基于jquery的实现异步跨域提交表单的实现代码,需要的朋友可以参考下。

    1.使用post提交方式 2.构造表单的数格式 3.结合form表单的submit调用ajax的回调函数. 使用 jQuery 异步提交表单代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>无标题页</title> </head> <script src="js/jquery-1.4.2.js"></script&g

Tags: