/// <summary> /// 单线程业务逻辑 /// </summary> private void oneThreadChengTongService() { //TODO 如果不能动态更改userAgent,那就多启动几个客户端程序,谁抢到了下载线程谁就执行,或者开通城通的多线程下载 //获取要伪装的上级页面地址 sourceFromData = SourceFromConfig.randomSourceFromData(); //随机的userAgent信息 userAgent = UserAgent.randomUserAgent(); if (!Cef.IsInitialized) { CefSettings settings = new CefSettings() { CachePath = Directory.GetCurrentDirectory() + @"\Cache", }; settings.UserAgent = userAgent; settings.PersistSessionCookies = true; //支持cookie settings.CefCommandLineArgs.Add("ppapi-flash-path", @"Plugins\pepflashplayer.dll"); //cef 支持flash http://blog.csdn.net/xxhongdev/article/details/77195339 settings.AcceptLanguageList = "zh-CN,zh;q=0.8"; //settings.CefCommandLineArgs.Add("proxy-server", ipAndPort); //settings.CefCommandLineArgs.Add("no-proxy-server", "1") //settings.UserAgent = "Hello!"; Cef.Initialize(settings); } //browser = new ChromiumWebBrowser("https://www.baidu.com/s?wd=%E6%88%91%E7%9A%84ip&rsv_spt=1&rsv_iqid=0x914838db0001e715&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=94789287_hao_pg&rsv_enter=1&rsv_sug3=5&rsv_sug1=3&rsv_sug7=100&rsv_t=2fec3e53%2FvqkD9VS1c4ogr84NRknqB%2FGqrZrxz5Cxm5EsGDivYD6hdnRTYE7%2BQZBJN4p7tl%2B"); String testIp = "https://www.baidu.com/s?wd=%E6%88%91%E7%9A%84ip&rsv_spt=1&rsv_iqid=0x914838db0001e715&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=94789287_hao_pg&rsv_enter=1&rsv_sug3=5&rsv_sug1=3&rsv_sug7=100&rsv_t=2fec3e53%2FvqkD9VS1c4ogr84NRknqB%2FGqrZrxz5Cxm5EsGDivYD6hdnRTYE7%2BQZBJN4p7tl%2B"; browser = new ChromiumWebBrowser(sourceFromData.FromSource) { //browser = new ChromiumWebBrowser(testIp){ BrowserSettings = new BrowserSettings() { Plugins = CefState.Enabled }, Dock = DockStyle.Fill }; browser.FrameLoadEnd += browser_FrameLoadEnd; //网页加载完成 browser.DownloadHandler = new MyDownLoadFile(); //下载器配置 browser.LifeSpanHandler = new MyLifeSpanHandler(); //在同一窗口打开链接 browser.RequestHandler = new MyRequestHandler(sourceFromData); //动态更改 header //TODO: 在官方demo里CefSharp.Example中->Handlers->RequestHandler中93行说明了如何让每次请求都更改user-agent,可以参考 //browser.RequestHandler = new MyRequestHandler();//每次请求都更换User-Agent 注意IRequestHandler在CefSharp.IRequestHandler browser.Dock = DockStyle.Fill; //js调用c# //browser表示你的CefSharp对象使用它的RegisterJsObject来绑定你的.net类 browser.RegisterJsObject("sourceFromData", sourceFromData); //Console.WriteLine("browser是否初始化:" + browser); //由于在下载之头启用了代理ip,此处要禁止代理ip Cef.UIThreadTaskFactory.StartNew(delegate { //Console.WriteLine("获取的ip:" + ipAndPort); //Console.WriteLine("browser2是否初始化:" + browser); var rc = Cef.GetGlobalRequestContext(); var v = new Dictionary <string, object>(); v["mode"] = "fixed_servers"; //v["server"] = WuyouProxy.getProxyIpAndPort(); v["User-Agent"] = userAgent; string error; bool success = rc.SetPreference("proxy", v, out error); if (success) { } }); this.panel1.Controls.Clear(); this.panel1.Controls.Add(browser); }
public MyRequestHandler(SourceFromData sourceFromData) { this.sourceFromData = sourceFromData; }