ISAPI之Http返回不同的数据类型
2012-10-08 15:46
323 查看
在写ISAPI程序时,不同的情况可能需要返回不容的数据类型,例如有的http响应需要文本,有的可以是二进制更省流量,有的需要另存为某种文件,示例代码如下。
1返回文本,可以直接以网页的形式打开
2返回某种文件格式的数据流,弹出保存文件窗口,可设置一个文件名称
3二进制,更省流量
1返回文本,可以直接以网页的形式打开
DWORD ReturnText(LPEXTENSION_CONTROL_BLOCK pECB,const vector<char>& vecBody) { char HeaderBuff[300]; DWORD dwBodySize = (DWORD)vecBody.size(); DWORD dwHeaderSize = (DWORD)sprintf_s(HeaderBuff, "Content-Type: text/plain\r\n" "Charset: utf-8\r\n" "Cache-Control: no-store\r\n" "Content-Length: %d\r\n\r\n", dwBodySize); if(!pECB->ServerSupportFunction(pECB->ConnID,HSE_REQ_SEND_RESPONSE_HEADER,NULL,&dwHeaderSize,(LPDWORD)HeaderBuff)) { return HSE_STATUS_ERROR; } if (dwBodySize > 0) { if(!pECB->WriteClient(pECB->ConnID,(LPVOID)&vecBody[0],&dwBodySize,0)) { return HSE_STATUS_ERROR; } } return HSE_STATUS_SUCCESS; }
2返回某种文件格式的数据流,弹出保存文件窗口,可设置一个文件名称
DWORD ReturnCSV(LPEXTENSION_CONTROL_BLOCK pECB,const vector<byte>& vecBody, const string& strFileName) { char HeaderBuff[300]; DWORD dwBodySize = (DWORD)vecBody.size(); DWORD dwHeaderSize = (DWORD)sprintf_s(HeaderBuff, "Content-Type: application/vnd.ms-excel\r\n" "Content-Disposition:filename=%s.csv\r\n" "Charset: GB2312\r\n" "Cache-Control: no-store\r\n" "Content-Length: %d\r\n\r\n", strFileName.c_str(), dwBodySize); if(!pECB->ServerSupportFunction(pECB->ConnID,HSE_REQ_SEND_RESPONSE_HEADER,NULL,&dwHeaderSize,(LPDWORD)HeaderBuff)) { return HSE_STATUS_ERROR; } if (dwBodySize > 0) { if(!pECB->WriteClient(pECB->ConnID,(LPVOID)&vecBody[0],&dwBodySize,0)) { return HSE_STATUS_ERROR; } } return HSE_STATUS_SUCCESS; }
3二进制,更省流量
DWORD ReturnBinary(LPEXTENSION_CONTROL_BLOCK pECB,const vector<byte>& vecBody) { char HeaderBuff[300]; DWORD dwBodySize = (DWORD)vecBody.size(); DWORD dwHeaderSize = (DWORD)sprintf_s(HeaderBuff, "Cache-Control: no-store\r\n" "Content-Type: application/octet-stream\r\n" "Content-Length: %d\r\n\r\n", dwBodySize); if(!pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER,NULL,&dwHeaderSize,(LPDWORD)HeaderBuff)) { return HSE_STATUS_ERROR; } if (dwBodySize > 0) { if(!pECB->WriteClient(pECB->ConnID,(LPVOID)&vecBody[0],&dwBodySize,0)) { return HSE_STATUS_ERROR; } } return HSE_STATUS_SUCCESS; }
相关文章推荐
- Java为什么两个值相等的对象==比较返回false而两个值相等的不同类型的的基本数据类型返回true
- 有时我们需要调用一个函数时,返回多个不同类型的数据
- AJAX-----07XMLHttpRequest对象的处理返回的JSON类型数据
- AJAX-----06XMLHttpRequest对象的处理返回的XML类型数据
- Java_HttpClient获取返回类型为JSON或XML的数据
- redis不同数据返回类型读取
- AJAX ,在jsp处理 action返回的不同数据类型
- 不同的redis的数据类型适用场景, 转载地址:http://blog.csdn.net/gaogaoshan/article/details/41039581/
- 阿里RAP+fiddler实现app原生应用的cgi数据mock----- (二)添加mock规则,随机返回4中类型(不同长度)的数据
- AIDL实现不同应用之间跨进程通讯及传递与返回各种数据类型和远程接口回调
- bottle框架学习(四)为web客户端返回不同类型的数据
- springmvc访问返回数据类型格式化json报http status 406 和json时间格式化
- 语法基础: 使用不同的数据类型标记数组
- hibernate query.list() 返回的数据类型
- Discuz! 安装插件和风格出现错误提示"数据类型错误,请返回。 php xml 正确的解析方式
- Xcode7 无法请求到数据, iOS9无法请求HTTP类型的数据
- 整合struts2,jquery,json。采用jquery ajax,从struts2 action返回json类型数据
- Jquery Ajax 返回数据类型变成document
- HttpPost Josn数据及服务端返回Json数据代码详解
- android-async-http开源项目对服务器端返回JSON数据的处理