تغییر user agent در سی شارپ #C

کد با پلتفرم بوی - کد سی شارپ
کد با پلتفرم بوی – کد سی شارپ

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) و سیستم عامل (ویندوز ۷ ، ۸ ، ۱۰ و ویندوز فون) متفاوت هستند.

به عنوان مثال ، رشته user agent برای Internet Explorer 11 در ویندوز ۱۰ را برای شما قرار داده ایم :

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

کدهای بیشتر - سی شارپ

آیا این مطلب برای شما مفید بود؟