Adakah yang tahu bagaimana saya bisa membuat IIS mencatat data POST atau seluruh permintaan HTTP?
Adakah yang tahu bagaimana saya bisa membuat IIS mencatat data POST atau seluruh permintaan HTTP?
Jawaban:
Log IIS hanya merekam informasi querystring dan header tanpa data POST.
Jika Anda menggunakan IIS7, Anda dapat mengaktifkan Pelacakan Permintaan Gagal untuk kode status 200. Itu akan merekam semua data dan Anda dapat memilih jenis data yang akan disertakan.
Di IIS6 atau 7, Anda dapat menggunakan Application_BeginRequest di global.asax dan membuat pendataan data POST Anda sendiri.
Atau, di IIS7, Anda dapat menulis Modul HTTP dengan pencatatan kustom Anda sendiri.
Dalam kode yang dikelola, Anda dapat menggunakan metode Response.AppendToLog. Metode ini akan menambahkan data ke bidang cs-uri-stem - total panjang hingga 4100 karakter (tidak berdokumen). Jika Anda melebihi batas itu, maka nilai yang akan dicatat diganti dengan "..."
Misalnya, menambahkan sesuatu seperti ini ke file Global.asax Anda harus melakukan trik (C #):
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
}
}
}
}
Sementara saya menghargai bahwa ini adalah pertanyaan lama, saya menemukan kode ini memberi saya apa yang saya butuhkan, file teks dengan header permintaan lengkap dan jawabannya, masukkan ke global.asax.cs Anda:
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);
}
Ini akan membuat file teks untuk setiap permintaan (termasuk gambar) jadi berhati-hatilah saat Anda menggunakannya. Saya hanya menggunakannya untuk mencatat permintaan posting tertentu.
Coba ini di file web.config Anda untuk melacak semuanya
<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>
Ini terlihat menggembirakan, meskipun saya belum mencobanya:
https://www.codeproject.com/Tips/1213108/HttpModule-for-Logging-HTTP-POST-Data-in-IIS-Log
Bagaimana ini berbeda dari opsi lain yang ditawarkan di sini, dengan kode di global.asax.cs? Itu hanya akan berfungsi untuk permintaan halaman ASP.NET, bukan halaman lain yang dapat diproses IIS (php, cgi, jsp, cfml). Tautan yang saya bagikan adalah modul yang dapat diaktifkan di IIS untuk situs apa pun (atau di tingkat server) untuk memproses segala jenis permintaan.