Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用ISAPI过滤器将头文件放入文件_C++_Isapi - Fatal编程技术网

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,但我认为我不会有太多运气。无论如何,谢谢。