C++ 使用ISAPI过滤器将头文件放入文件
我试图将整个原始头文件放入一个文件中,但每次我尝试写入内容时,我都会得到一个文件,其中充满了内容。我做错了什么C++ 使用ISAPI过滤器将头文件放入文件,c++,isapi,C++,Isapi,我试图将整个原始头文件放入一个文件中,但每次我尝试写入内容时,我都会得到一个文件,其中充满了内容。我做错了什么 DWORD CTryISAPIFilter::OnPreprocHeaders(CHttpFilterContext* httpContext, PHTTP_FILTER_PREPROC_HEADERS headerInformation) { char buffer[4096]; DWORD bufferSize = sizeof(buffer);
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;
}
DWORD CTryISAPIFilter::OnPrepochReaders(HttpFilterContext*httpContext,
PHTTP_过滤器_预加工_标题信息)
{
字符缓冲区[4096];
DWORD bufferSize=sizeof(缓冲区);
BOOL HeaderBoolean=headerInformation->GetHeader(httpContext->m_pFC,“所有原始”、缓冲区和缓冲区大小);
char*ptrIn=(char*)缓冲区;
std::string postData2=ptrIn;
char*outputString=新字符[4096];
int i=0;
对于(i=0;i是否headerInformation->GetHeader()
返回成功
如果是这样,它实际写入缓冲区
(大概它在缓冲区大小
中的值中告诉您这一点)
我怀疑GetHeader()
失败,并且没有向缓冲区写入任何内容,因为:
- 您将获得所有“ÌÌÌÌÌÌÌÌÌÌ”字符(这是VC调试构建将未初始化内存设置为的),并且
- 当索引
postData2
远远超过通常应该是字符串结尾的位置时(无论如何,在大多数情况下),不会引发异常。因此缓冲区中显然没有'\0'终止符(如果成功,GetHeader()
将写入该终止符)
您需要检查此故障并检查GetLastError()
,以获取有关故障的更多信息
更新:缓冲区可能不够大。有关如何适当调整缓冲区的大小,请参阅
更新2:我已经有一段时间没有做web工作了,但是“ALL_RAW”不是CGI风格的服务器环境变量,而是头吗?你不应该使用GetServerVariable()
而不是GetHeader()
?来检索它吗?你知道outputString[I+1]=NULL;
会导致缓冲区溢出,不是吗?因此,我认为你是对的,根据MS文档,在我尝试提取数据时,数据可能不可用。不过,我可以提取say URL变量。我将尝试GetServerVariables,但我认为我不会有太多运气。无论如何,谢谢。