it-swarm.com.de

IIS Protokollanforderungshauptteil / POST Daten

Weiß jemand, wie ich IIS zum Protokollieren POST Daten oder die gesamte HTTP-Anfrage) bekommen könnte?

35
Jim

Die IIS -Protokolle zeichnen nur Querystring- und Header-Informationen ohne POST -Daten) auf.

Wenn Sie IIS7 verwenden, können Sie die Ablaufverfolgung fehlgeschlagener Anforderungen für den Statuscode 200 aktivieren. Dadurch werden alle Daten aufgezeichnet und Sie können auswählen, welcher Datentyp eingeschlossen werden soll.

In IIS6 oder 7 können Sie Application_BeginRequest in global.asax verwenden und eine eigene Protokollierung von POST Daten) erstellen.

In IIS7 können Sie auch ein HTTP-Modul mit Ihrer eigenen benutzerdefinierten Protokollierung schreiben.

33

In verwaltetem Code können Sie die Response.AppendToLog-Methode verwenden. Diese Methode hängt Daten an das Feld cs-uri-stem an - die Gesamtlänge beträgt bis zu 4100 Zeichen (undokumentiert). Wenn Sie diesen Grenzwert überschreiten, wird der Wert, der protokolliert worden wäre, durch "..." ersetzt.

Wenn Sie beispielsweise Ihrer Global.asax-Datei so etwas hinzufügen, sollten Sie den Trick (C #) ausführen:

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

Obwohl ich zu schätzen weiß, dass dies eine alte Frage ist, stellte ich fest, dass dieser Code mir genau das gab, was ich brauchte. Eine Textdatei mit den vollständigen Anforderungsheadern und der Antwort wurde in Ihre global.asax.cs eingefügt:

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

Dadurch wird für jede Anforderung (einschließlich Bilder) eine Textdatei erstellt. Seien Sie also vorsichtig, wo Sie sie verwenden. Ich habe es nur verwendet, um bestimmte Post-Anfragen zu protokollieren.

4
Terry Kernan

Versuchen Sie dies in Ihrer web.config-Datei, um alles zu verfolgen

<tracing>
  <traceFailedRequests>
    <remove path="*" />
    <add path="*">
      <traceAreas>
        <add provider="ASP" verbosity="Verbose" />
        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
        <add provider="ISAPI Extension" verbosity="Verbose" />
        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,WebSocket,Rewrite" verbosity="Verbose" />
      </traceAreas>
      <failureDefinitions timeTaken="00:00:00" statusCodes="200-999" />
    </add>
  </traceFailedRequests>
</tracing>
2
DeepSpace101

Das sieht ermutigend aus, obwohl ich es noch nicht ausprobiert habe:

https://www.codeproject.com/Tips/1213108/HttpModule-for-Logging-HTTP-POST-Data-in-IIS-Log

Wie unterscheidet sich dies von der anderen hier angebotenen Option mit Code in der Datei global.asax.cs? Dies würde nur für ASP.NET-Seitenanforderungen funktionieren, nicht für andere Seiten IIS wird möglicherweise verarbeitet (php, cgi, jsp, cfml). ​​Der von mir freigegebene Link führt zu einem Modul, das in = aktiviert werden kann IIS für jede Site (oder auf Serverebene), die für jede Art von Anforderung verarbeitet werden soll.

0
charlie arehart