user agent در واقع اطلاعات نسخه استفاده شده مرورگر جهت ارسال درخواست به سرور را مشخص می کند و طبق خواسته کاربر می تواند عوض شود . در مواقع ای که امکان اپدیت کردن مرورگر را ندارید می توانید از این گزینه برای دور زدن هشدارهای امنیتی سایت ها استفاده کنید که البته همیشه هم اینگونه نیست !
شما می توانید از WebClient استفاده کنید . برای نمونه برنامه سی شارپ خود را که یک درخواست به WebClient شما اضافه می کند را بررسی کنید و یک user agent از نوع Windows Phone بسازید .
این نمونه قطعه کد توضیح داده شده است:
WebClient client = new WebClient (); // Add a user agent header in case the // requested URI contains a query. client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; " + "Windows NT 5.2; .NET CLR 1.0.3705;)");
برای هندل کردن درخواست تغییر user agent به Http در هرکجای برنامه می توانید از قطعه کد زیر استفاده کنید :
var message = new HttpRequestMessage(method, url); message.Headers.TryAddWithoutValidation("user-agent", "<user agent header value>"); var client = new HttpClient(); var response = await client.SendAsync(message);
تغییر user agent برای مرورگر web browser در سی شارپ
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
web_browser.Navigate("https://www.google.com/search?q=" + word1.Text, "_top", null, "UserAgent: Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)");
جهت اطلاعات بیشتر شما برنامه نویسان در اینجا راهنمایی بیشتر برای رشته های user agent برای مرورگرهای مایکروسافت را گرد آوری کرده ایم . رشته های user agent از نظر مرورگر (Internet Explorer و Edge) و سیستم عامل (ویندوز 7 ، 8 ، 10 و ویندوز فون) متفاوت هستند.
به عنوان مثال ، رشته user agent برای Internet Explorer 11 در ویندوز 10 را برای شما قرار داده ایم :
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
و برای Internet Explorer برای Windows Phone 8.1 :
Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537
الگوهایی بیشتری برای رشته های user agent برای مرورگر Edge برای دسک تاپ ، موبایل و وب ویو آورده شده است. برای مشاهده برخی از نمونه های رشته عامل عامل کاربر ، به این پاسخ مراجعه کنید.
IE11 Windows 8.1:
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
IE11 Windows 7:
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
const string ua = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; Request.Headers["User-Agent"] = ua; var httpWorkerRequestField = Request.GetType().GetField("_wr", BindingFlags.Instance | BindingFlags.NonPublic); if (httpWorkerRequestField != null) { var httpWorkerRequest = httpWorkerRequestField.GetValue(Request); var knownRequestHeadersField = httpWorkerRequest.GetType().GetField("_knownRequestHeaders", BindingFlags.Instance | BindingFlags.NonPublic); if (knownRequestHeadersField != null) { string[] knownRequestHeaders = (string[])knownRequestHeadersField.GetValue(httpWorkerRequest); knownRequestHeaders[39] = ua; } }
شما همیشه می توانید رشته User-Agent را توسط فشار دادن F12 برای ابزارهای توسعه دهندگان در مرورگر ها مشاهده کنید :
Tabulator: نوع کنسول
نوع بازگشتی : “navigator.userAgent”
این روش در مرورگرهای IE ، Edge ، Chrome تست شده است .
در IE و Edge می توانید آنرا برای پنجره های فعلی بازنویسی کنید.
با فرستادن درخواسن به HttpWebRequest ، از ویژگی UserAgent در HttpWebRequest استفاده کنید.
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.UserAgent = "my user agent";
می توانید این قطعه را به این شکل نیز بازنویسی کنید :
using System.Net.Http; using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders .UserAgent .TryParseAdd("Mike D's Agent"); //User-Agent: Mike D's Agent }
در صورتی که از کتابخانه .NET Standard 2.0 استفاده می کنید از این قطعه کد استفاده کنید :
HttpClient client = new HttpClient(); ProductHeaderValue header = new ProductHeaderValue("MyAwesomeLibrary", Assembly.GetExecutingAssembly().GetName().Version.ToString()); ProductInfoHeaderValue userAgent = new ProductInfoHeaderValue(header); client.DefaultRequestHeaders.UserAgent.Add(userAgent); // User-Agent: MyAwesomeLibrary/1.0.0.0
WebRequest postrequest = WebRequest.Create("protocol://endpointurl.ext"); ((System.Net.HttpWebRequest)postrequest).UserAgent = ".NET Framework"
// Create a new 'HttpWebRequest' object to the mentioned URL. var myHttpWebRequest=(HttpWebRequest)WebRequest.Create("http://www.contoso.com"); myHttpWebRequest.UserAgent=".NET Framework Test Client"; // Assign the response object of 'HttpWebRequest' to a 'HttpWebResponse' variable. var myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();
تغییر user agent در مرورگر نصب شده بر روی سیستم عامل
تست صحت عملکرد کد زیر بر عهده کاربر است . در اینبار مطمئن نیستیم .
[DllImport("urlmon.dll", CharSet = CharSet.Ansi)] private static extern int UrlMkSetSessionOption( int dwOption, string pBuffer, int dwBufferLength, int dwReserved); const int URLMON_OPTION_USERAGENT = 0x10000001; public void ChangeUserAgent() { List<string> userAgent = new List<string>(); string ua = "Googlebot/2.1 (+http://www.google.com/bot.html)"; UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0); }
اگر مطمئن هستید قصد دارید جای خصوصی سازی وب ساخته شده در برنامه خود از تغییر ساختار مرورگر نصب شده بر روی سیستم استفاده کنید . باید DllImport را فراخوانی کرده و یا از قطعه کد زیر استفاده کنید :
در واقع ، شما باید کلاس WebBrowser را گسترش دهید.
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
public class ExtendedWebBrowser : WebBrowser { bool renavigating = false; public string UserAgent { get; set; } public ExtendedWebBrowser() { DocumentCompleted += SetupBrowser; //this will cause SetupBrowser to run (we need a document object) Navigate("about:blank"); } void SetupBrowser(object sender, WebBrowserDocumentCompletedEventArgs e) { DocumentCompleted -= SetupBrowser; SHDocVw.WebBrowser xBrowser = (SHDocVw.WebBrowser)ActiveXInstance; xBrowser.BeforeNavigate2 += BeforeNavigate; DocumentCompleted += PageLoaded; } void PageLoaded(object sender, WebBrowserDocumentCompletedEventArgs e) { } void BeforeNavigate(object pDisp, ref object url, ref object flags, ref object targetFrameName, ref object postData, ref object headers, ref bool cancel) { if (!string.IsNullOrEmpty(UserAgent)) { if (!renavigating) { headers += string.Format("User-Agent: {0}\r\n", UserAgent); renavigating = true; cancel = true; Navigate((string)url, (string)targetFrameName, (byte[])postData, (string)headers); } else { renavigating = false; } } } }