আইআইএস লগ রিকোয়েস্ট বডি / পোস্ট ডেটা


33

কেউ কি জানেন যে আমি কীভাবে পোষ্ট ডেটা বা সম্পূর্ণ এইচটিটিপি অনুরোধে আইআইএস পেতে পারি?


মোডসিকিউরিটি আইআইএস 7 + এর জন্য উপলব্ধ । এটি অনুরোধ এবং প্রতিক্রিয়া উভয়ই শিরোলেখ এবং শরীরে সম্পূর্ণ অ্যাক্সেসের অনুমতি দেবে।
ব্যবহারকারী 2320464

উত্তর:


32

আইআইএস কোনও পোস্টের ডেটা ছাড়াই কেবল ক্যোরিস্ট্রিং এবং শিরোনামের তথ্য রেকর্ড করে।

আপনি যদি আইআইএস using ব্যবহার করছেন, আপনি স্থিতি কোড 200 এর জন্য ব্যর্থ অনুরোধ ট্র্যাকিং সক্ষম করতে পারেন That এটি সমস্ত ডেটা রেকর্ড করবে এবং আপনি কোন ধরণের ডেটা অন্তর্ভুক্ত করবেন তা চয়ন করতে পারেন।

আইআইএস or বা either-তে আপনি গ্লোবাল.অ্যাক্সে অ্যাপ্লিকেশন_বেগিনআরউইকটি ব্যবহার করতে পারেন এবং পোষ্টের ডেটাতে আপনার নিজস্ব লগিং তৈরি করতে পারেন।

অথবা, আইআইএস in-এ, আপনি নিজের কাস্টম লগিং দিয়ে একটি HTTP মডিউল লিখতে পারেন।


+1 - আমি আপনার উত্তরটি আমার নিজের থেকে অনেক বেশি পছন্দ করি। ব্যর্থ অনুরোধ ট্রেসিংয়ের বিষয়ে আমার স্পষ্টভাবে পড়তে হবে, যেহেতু আমি স্পষ্টতই IIS7 ব্যবহার করি নি যতটা আমার করা উচিত।
ইভান অ্যান্ডারসন 11

আপনি কীভাবে "কোন ধরণের ডেটা অন্তর্ভুক্ত করবেন তা নির্বাচন করতে পারেন"?
পাভেল চুচুভা

1
এফআরটি বিধি তৈরি করার সময় উইজার্ডের শেষ ধাপটি আপনাকে কোন ডেটা অন্তর্ভুক্ত করতে হবে তা নির্বাচন করতে দেয়। এটি সমস্ত কিছুকে ডিফল্ট করে।
স্কট ফোর্সিথ - এমভিপি

আমি আইআইএস for এর জন্য কিছু খুঁজছিলাম কিন্তু এই লিঙ্কটি জুড়ে এসেছি যা দেখায় উন্নত লগিং আইআইএস for এর জন্য একটি অ্যাড-অন বিকল্প। iis.net/learn/extensions/advanced-logging-module/…
andyknas

এটি উপস্থিত নেই (সেই url Andyknas শেয়ার করা থেকে) যে আইআইএস "অগ্রণী লগিং" লগ পোস্ট করে। এটি "ক্লায়েন্ট লগিং" এর জন্য একটি বিকল্প প্রস্তাব করে, যা কোনও নির্দিষ্ট ধরণের পোস্টগুলিতে লগ করতে পারে তবে সমস্ত ফর্ম পোস্ট নয়, যা ওপি অনুরোধ করছে বলে মনে হয় (এবং আমি নিজেই এই বিষয়ে ভাবছিলাম)
চার্লি অ্যারিয়ার্ট

8

পরিচালিত কোডে আপনি রেসপন্স.অ্যাপেনডটওলগ পদ্ধতিটি ব্যবহার করতে পারেন। এই পদ্ধতিটি সিএস-ইউরি-স্টেম ক্ষেত্রের ডেটা সংযোজন করবে - মোট দৈর্ঘ্য 4100 টি অক্ষর পর্যন্ত (অননুমোদিত)। আপনি যদি এই সীমাটি অতিক্রম করেন, তবে যে মানটি লগ করা হত তা "..." দিয়ে প্রতিস্থাপন করা হবে

উদাহরণস্বরূপ, আপনার Global.asax ফাইলে এই জাতীয় কিছু যুক্ত করা কৌশলটি করা উচিত (সি #):

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

1
এই মন্তব্য হিসাবে, সীমাটি 4100 নয়, এটি 4KB যা 4096। তাই পোষ্টের ডেটা> 4KB সঠিকভাবে লগ করার জন্য এই কোডটি কিছুটা সংশোধন করা দরকার।
স্টিভেন ভি

1
আমাকে HttpContext.Current.Request.InputStream.Position = 0 যুক্ত করতে হয়েছিল;
অনুরোধের আগে.বাইনারি রিড

3

যদিও আমি প্রশংসা করি যে এটি একটি পুরানো প্রশ্ন, আমি খুঁজে পেয়েছি যে এই কোডটি আমাকে যা প্রয়োজন ঠিক তা দিয়েছিল, সম্পূর্ণ অনুরোধ শিরোনাম এবং প্রতিক্রিয়া সহ একটি পাঠ্য ফাইল, এটি আপনার Global.asax.cs এ রেখে দিয়েছে:

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

এটি প্রতিটি অনুরোধের জন্য একটি টেক্সট ফাইল তৈরি করবে (চিত্র সহ) যাতে আপনি এটি কোথায় ব্যবহার করবেন সে সম্পর্কে সতর্ক হন। আমি কেবল এটি নির্দিষ্ট পোস্টের অনুরোধগুলিতে লগ করতে ব্যবহার করেছি।


1

আপনার ট্রেড ফাইলটিতে এটি চেষ্টা করুন সমস্ত কিছু সনাক্ত করতে

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

তবে মনে রাখবেন যে এফআরটি বৈশিষ্ট্যটি স্পষ্টভাবে এটির তৈরি লগ ফাইলের সংখ্যা সীমিত করে দেয় (যা একটি ভাল জিনিস), সুতরাং আপনাকে এটি পরিবর্তন করতে হবে, হয় ইউআইতে বা কনফিগার ফাইল এন্ট্রিগুলির মাধ্যমে - এবং ভলিউমের পরিমাণের জন্য যথাযথ সতর্কতার সাথে লগগুলি যা এমনকি একটি পরিমিত ওয়েব অ্যাপে তৈরি করা হবে।
চার্লি আয়ারহার্ট

0

এটি উত্সাহজনক দেখায়, যদিও আমি এখনও এটি চেষ্টা করি নি:

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

গ্লোবাল.অ্যাস্যাক্স কোডের কোড সহ এটি এখানে দেওয়া অন্যান্য বিকল্পের থেকে কীভাবে আলাদা? এটি কেবল এএসপি.নেট পৃষ্ঠাগুলির অনুরোধগুলির জন্যই কাজ করবে, অন্যান্য পৃষ্ঠাগুলি আইআইএস প্রক্রিয়া করতে পারে না (পিএইচপি, সিজি, জেএসপি, সিএফএমএল)। আমি যে লিঙ্কটি ভাগ করেছি তা এমন একটি মডিউল যা কোনও সাইটের জন্য (বা সার্ভার স্তরে) কোনও ধরণের অনুরোধের জন্য প্রক্রিয়া করতে আইআইএস সক্ষম করতে পারে।


-4

আপনার আইআইএস লগ সেটিংসে নিম্নলিখিতগুলি সক্ষম করার চেষ্টা করুন:

পদ্ধতি (সিএস-পদ্ধতি)

ইউআরআই স্টেম (সিএস-ইউরি-স্টেম)

ইউআরআই ক্যোয়ারী (সিএস-ইউরি-কোয়েরি)


আমি চেষ্টা করেছি, সহায়তা করিনি ... :(
বুদা

3
এই সেটিংগুলিতে POST ডেটা অন্তর্ভুক্ত থাকবে না
ছিনিয়ে নেওয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.