ISAPI之Http返回不同的数据类型

在写ISAPI程序时,不同的情况可能需要返回不容的数据类型,例如有的http响应需要文本,有的可以是二进制更省流量,有的需要另存为某种文件,示例代码如下。


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;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值