首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IIS日志请求主体/ POST数据

IIS日志请求主体/ POST数据
EN

Server Fault用户
提问于 2009-12-04 02:22:35
回答 5查看 68.7K关注 0票数 44

有人知道我如何让IIS记录POST数据或整个HTTP请求吗?

EN

回答 5

Server Fault用户

发布于 2009-12-04 04:34:37

IIS日志仅记录查询字符串和头信息,不包含任何POST数据。

如果使用的是IIS7,则可以启用状态代码200的失败请求跟踪。这将记录所有的数据,您可以选择包含哪种类型的数据。

在IIS6或7中,您可以在global.asax中使用Application_BeginRequest并创建自己的POST数据日志记录。

或者,在IIS7中,您可以使用自己的自定义日志编写HTTP。

票数 41
EN

Server Fault用户

发布于 2011-02-27 21:02:47

在托管代码中,您可以使用Response.AppendToLog方法。该方法会将数据附加到cs-uri--茎字段--如果超过该限制,总长度可达4100个字符(无文档). ,则将记录的值替换为“.”。

例如,将类似的内容添加到Global.asax文件中应该可以完成以下任务(C#):

代码语言:javascript
运行
复制
void Application_EndRequest(Object Sender, EventArgs e)
{
    if( "POST" == Request.HttpMethod )
    {
        byte[] bytes    = Request.BinaryRead(Request.TotalBytes);
        string s    = Encoding.UTF8.GetString(bytes);
        if (!String.IsNullOrEmpty(s))
        {
            int QueryStringLength = 0;
            if (0 < Request.QueryString.Count)
            {
                QueryStringLength = Request.ServerVariables["QUERY_STRING"].Length;
                Response.AppendToLog( "&" );
            }

            if (4100 > ( QueryStringLength + s.Length ) )
            {
                Response.AppendToLog(s);
            }
            else
            {
                // append only the first 4090 the limit is a total of 4100 char.
                Response.AppendToLog(s.Substring(0, ( 4090 - QueryStringLength )));
                // indicate buffer exceeded
                Response.AppendToLog("|||...|||");
                // TODO: if s.Length >; 4000 then log to separate file
            }
        }       
    }
}
票数 10
EN

Server Fault用户

发布于 2012-12-14 09:48:10

虽然我理解这是一个老问题,但我发现这段代码正是我所需要的,一个包含完整请求头和响应的文本文件,将其放入您的global.asax.cs中:

代码语言:javascript
运行
复制
protected void Application_BeginRequest(Object Sender, EventArgs e)
{
    string uniqueid = DateTime.Now.Ticks.ToString();
    string logfile = String.Format("C:\\path\\to\\folder\\requests\\{0}.txt", uniqueid);
    Request.SaveAs(logfile, true);
}

这将为每个请求(包括图像)创建一个文本文件,所以在使用它时要小心。我只使用它来记录特定的帖子请求。

票数 5
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/90943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档