我正在尝试将整个原始标题放入文件中,但每当我尝试编写内容时,我都会得到一个满是ÌÌ的文件。我究竟做错了什么?
DWORD CTryISAPIFilter::OnPreprocHeaders(CHttpFilterContext* httpContext,
PHTTP_FILTER_PREPROC_HEADERS headerInformation)
{
char buffer[4096];
DWORD bufferSize = sizeof(buffer);
BOOL HeaderBoolean = headerInformation->GetHeader(httpContext->m_pFC, "ALL_RAW", buffer, &bufferSize);
char * ptrIn = (char *) buffer;
std::string postData2 = ptrIn;
char * outputString = new char[4096];
int i = 0;
for(i=0;i<4096;i++){
outputString[i] = postData2[i];
}
outputString[i+1] = NULL;
std::ofstream outfile ("D:\\WebSites\\wwwroot\\test.txt",std::ios::app);
outfile << outputString << std::endl;
outfile.close();
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
答案 0 :(得分:1)
headerInformation->GetHeader()
是否会成功?
如果是这样,它实际上写入了多少buffer
(可能它会在bufferSize
中的值中告诉你这个)
我怀疑GetHeader()
失败,并且没有任何内容写入buffer
,因为:
postData2
索引到通常应该是字符串结尾(大多数情况下无论如何)时,您都不会抛出异常。所以buffer
中显然没有'\ 0'终止符(如果成功,GetHeader()
会写入。)您需要检查此失败并检查GetLastError()
以获取有关失败的更多信息。
更新:您的缓冲区可能不够大。有关如何正确调整缓冲区大小的信息,请参阅http://msdn.microsoft.com/en-us/magazine/cc163939.aspx。
更新2:我已经有一段时间了,因为我已经完成了网络内容,但是“ALL_RAW”不是CGI风格的服务器环境变量而不是标题?您不应该使用GetServerVariable()
而不是GetHeader()
来检索此内容吗?