簡體   English   中英

使用ISAPI篩選器將標頭導入文件

[英]Getting Header into file using ISAPI Filter

我試圖將整個原始標頭保存到文件中,但是每次嘗試寫入內容時,都會得到一個充滿full的文件。 我究竟做錯了什么?

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

headerInformation->GetHeader()返回成功嗎?

如果是這樣,它實際上要寫入buffer多少(大概是通過放置在bufferSize中的值告訴您的)

我懷疑GetHeader()失敗,並且沒有任何內容寫入buffer因為:

  • 您將得到所有“ÌÌÌÌÌÌÌÌÌÌÌ”字符(這是VC的調試版本將未初始化的內存設置為),並且
  • 當您對postData2索引時,通常不會在字符串的末尾(無論如何,無論如何),都不會引發異常。 因此, buffer顯然沒有'\\ 0'終止GetHeader()如果成功, GetHeader()將寫入該終止符)。

您需要檢查此故障並檢查GetLastError()以獲得有關故障原因的更多信息。

更新:您的緩沖區可能不夠大。 有關如何適當調整緩沖區大小,請參見http://msdn.microsoft.com/zh-cn/magazine/cc163939.aspx

更新2:自從我完成Web工作以來已經有一段時間了,但是“ ALL_RAW”不是CGI風格的服務器環境變量,而不是標題嗎? 您不應該使用GetServerVariable()而不是GetHeader()來檢索它嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM