PDA

View Full Version : تغییر User agent



mahdi0000
شنبه 17 شهریور 1397, 11:48 صبح
سلام دوستان
میخوام user agent کاربر رو موقع بازدید از webBrowser تغییر بدم.


توی این سایت (https://stackoverflow.com/questions/11841540/setting-the-user-agent-header-for-a-webclient-request) هم راهنمایی کردند. ولی مورد اولی فقط یکبار تغییر میده. مورد دوم هم به صورت کلاس نوشته که بلد نیستم ازش استفاده کنم. ممنون میشه راهنمایی کنید.
public class CustomWebClient : WebClient
{
public CustomWebClient(){}

protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address) as HttpWebRequest;
request.UserAgent="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0;)";

//... your other custom code...

return request;
}
}

ramtinak
شنبه 17 شهریور 1397, 12:10 عصر
سلام، این برای تغییر user agent ـه WebClient هست و ربطی به WebBrowser نداره.
WebBrowser بصورت پیشفرض از اطلاعات اینترنت اکسپلوره استفاده میکنه.

یه روشی که داخل سایت های مختلف بهش اشاره میشه این روش هست که هنگام Navigate کردن، User agent رو تنظیم کنیم:
webBrowser1.Navigate("http://ame.com", null, null, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 OPR/54.0.2952.71");

که برای من یکی، همیشه خدا کار نمیکرد:| شما یه امتحانیش کن.

روش دو اینه که از UrlMkSetSessionOption استفاده کنیم.
فضای نامی مورد نیاز:
using System.Runtime.InteropServices;

[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()
{
string userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 OPR/54.0.2952.71";


UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, userAgent, userAgent.Length, 0);
}

کافیه تابع ChangeUserAgent رو فراخوانی کنی تا user agent عوض شه.

بعضی ها میگن که روش دوم داخل wpf کار نمیکنه و روش اول کار میکنه، پس بهتره هر دو روش رو امتحان کنی و ببینی کدوم برات کار میکنه و از همون استفاده کنی.

موفق باشید.

mahdi0000
شنبه 17 شهریور 1397, 17:52 عصر
ممنون
روش دوم فکر کنم کار کرد.

یه سوال دیگه
این webBrowser سی شارپ چرا بعضی از سایت ها رو که باز میکنه کلی ارور میده و صفحه را استاندارد لود نمیکنه؟
به خاطر اینه که از اینترنت اکسپلوره استفاده میکنه؟

danialafshari
شنبه 17 شهریور 1397, 19:32 عصر
خصوصیت ScriptErrorsSuppressed در WebBrowser رو برابر True قرار دهید

mahdi0000
شنبه 17 شهریور 1397, 22:17 عصر
خصوصیت ScriptErrorsSuppressed در WebBrowser رو برابر True قرار دهید
میدونم
ولی دوست صفحه رو لود نمیکنه

mahdi0000
پنج شنبه 12 مهر 1397, 22:36 عصر
سلام، این برای تغییر user agent ـه WebClient هست و ربطی به WebBrowser نداره.
WebBrowser بصورت پیشفرض از اطلاعات اینترنت اکسپلوره استفاده میکنه.

یه روشی که داخل سایت های مختلف بهش اشاره میشه این روش هست که هنگام Navigate کردن، User agent رو تنظیم کنیم:
webBrowser1.Navigate("http://ame.com", null, null, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 OPR/54.0.2952.71");

که برای من یکی، همیشه خدا کار نمیکرد:| شما یه امتحانیش کن.

روش دو اینه که از UrlMkSetSessionOption استفاده کنیم.
فضای نامی مورد نیاز:
using System.Runtime.InteropServices;

[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()
{
string userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 OPR/54.0.2952.71";


UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, userAgent, userAgent.Length, 0);
}

کافیه تابع ChangeUserAgent رو فراخوانی کنی تا user agent عوض شه.

بعضی ها میگن که روش دوم داخل wpf کار نمیکنه و روش اول کار میکنه، پس بهتره هر دو روش رو امتحان کنی و ببینی کدوم برات کار میکنه و از همون استفاده کنی.

موفق باشید.

سلام مجدد

چجوری میشه با استفاده از روش دوم، یورزایجنت های متفاوت به webbrowser ها در فرم داد؟

مثلا فرض کنید 6 تا webbrowser در یک فرم داریم، میخوایم همزمان به هر کدومشون یک یوزرایجنت متفاوت بدیم.