您的位置:首页 > 理论基础 > 计算机网络

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

2012-10-08 15:46 323 查看
在写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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  header null string
相关文章推荐