设为首页 加入收藏

TOP

VC编写自己构造http协议数据的post上传图片类(MFC环境 带编码转换)(转)
2012-12-02 22:33:55 来源: 作者: 【 】 浏览:334
Tags:编写 自己 构造 http 协议 数据 post 上传 图片 MFC 环境 编码 转换

上次用VC写了个MFC环境下的post数据类,地址:

/Html/diannaojishu/2009-10/4905858580.html

这次将这个类进行扩展,可以post图片。但这两个post所使用的方法不一样。

post数据,是直接在http协议头将Content-Type设为application/x-www-form-urlencoded,这样 服务器会将提交的数据,当作表单数据处理。发送的数据格式也为:userid=lilu&data=post图片类&name=天漏客。 而post图片则是自己构造http协议数据,将http协议头的Content-Type设为multipart/form-data,同时还要加上 boundary=xxxxxxx(xxxxxxx表示一个字符串),后面的协议数据内容将要以这个xxxxxxx来进行分隔。发送的数据格式为:

---------------2389jhrwfjsjd9823
Content-Disposition: form-data; name="userid"

27EF272F28239E5A34EE223FADFWAFAEaE

类源码下载:点击浏览下一页[点击浏览该文件:SendData类源码.rar]

实例源码下载:点击浏览下一页[点击浏览该文件:UploadPhoto实例加源码.rar]

首先说一下本类的方便之处。

1、使用方便,步骤简单。
2、发送图片时,还可以构造其他数据。
3、兼容_MBCS和_UNICODE模式,并且能使用GB2312和UTF8两种编码进行发送与接收,类自动实现转换。

首先说一下这个类的使用,方法比较简单。

1、在工程中加入SendData.h和SendData.cpp文件,然后包含头文件,就可以定义类。

CSendData    MySend;

2、设置服务器参数。

 MySend.SetServerParam(_T(www.lilu.name),_T("/posttest.asp"),80);

3、如果同时要包含数据,就要先构造数据。

 MySend.MakePostData(_T("userid"),_T("lilu"));
 MySend.MakePostData(_T("name"),_T("天漏客"));
 MySend.MakePostData(_T("homepage"),_T(www.lilu.name));

4、发送图片。定义好接收数据的指针,以及发送和接收的编码。

 TCHAR  *pRecvData = NULL; //接收数据的指针
 DWORD  dwRecvSize = 0;  //接收数据的大小
 DWORD  dwRetSend = 0;  //发送函数返回值
 int   SendCode = HTTP_POST_GB2312,RecvCode =HTTP_POST_GB2312; //发送与接收的编码
 
dwRetSend = MySend.PostPicDataMethod(_T("c:\\pic\\测试图片.jpg"),_T("filename"),
  &pRecvData,dwRecvSize,
  SendCode,RecvCode);
 //处理接收数据,返回值。
 //99:图片不存在
 //100:正常成功
 //101:服务器无法连接
 //102:提交页面无法打开
 //103:数据发送失败
 //104:服务器处理失败
 //500:异常错误

5、处理结果

类自动的根据编译环境,将返回指针转换为LPTSTR类型,所以你只需要定义一个LPTSTR类型的指针,将其地址传递给发送函数即可。类会自己分 配内存存储返回的结果,并且会自动释放。所以使用时要注意,当这个类的作用域结束时,相应的接收数据内存也会释放掉,你可以将接收数据另拷贝一份,或者在 它的作用域内处理掉也可。

CString strRecv(pRecvData);    //将接收数据复制到strRecv中。

6、完毕。

测试一下啊!界面如下:

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C/C++ assert() 函数用法 下一篇C++中delete和delete[]的区别

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: