/// <summary> /// 获取阿里妈妈的Cookie /// </summary> /// <returns></returns> public static DataContainer GetLoginTokenCookies() { var container = new DataContainer(); var ckVistor = new LazyCookieVistor(); var _PageCooies = ckVistor.LoadCookiesAsyc(GlobalContext.AlimamaSiteURL).Result; var json_cookies = JsonConvert.SerializeObject(_PageCooies); container.Result = json_cookies; return(container); }
/// <summary> /// 内部类方法加载指定的搜索url /// 比如:在初始化的时候 刷新Cookie用 或者刷新 Cookie 获取其他 /// </summary> /// <param name="searchUrl">请求指定的地址</param> /// <param name="timeOut">超时时间,不小于10秒,超时将返回加载超时</param> /// <returns></returns> protected Task <string> LoadUrlGetContentByCefBrowser(string searchUrl, int timeOut = 10000) { if (timeOut <= 10000) { timeOut = 10000; } try { //将事件消息模式转换为 task同步消息 var tcs = new TaskCompletionSource <string>(); bool isProcessRequestEnd = false; //注册请求处理委托 EventHandler <LoadEndEventArgs> handlerRequest = null; Action <string> disposeHandler = null; //资源释放委托 disposeHandler = (state) => { try { if (tcs.Task.IsCompleted != true) { //设置返回结果为固定的内容 tcs.SetResult(state); } } catch (Exception ex) { Logger.Error(ex); } finally { //线程锁打开自动进行下一个 waitHandler.Set(); } }; //2 开始发送请求LoadString handlerRequest = (s, e) => { isProcessRequestEnd = true;//标识正在接受请求 try { string url = HttpUtility.UrlDecode(searchUrl);//e.Frame.Url System.Diagnostics.Debug.WriteLine(string.Format("cef core loaded by :{0} ", url)); //刷新 cookie if (!string.IsNullOrEmpty(url) && !url.Equals("about:blank")) { var ckVisitor = new LazyCookieVistor(); ckVisitor.LoadCookiesAsyc(url, true); } } catch { } //mixdBrowser.CefLoader.LoadEnd -= handlerRequest; disposeHandler("loaded"); }; //etaoBrowser.ERequestHandler.OnRequestTheMoniterdUrl += handlerRequest; if (null == mixdBrowser || null == mixdBrowser.CefBrowser) { mixdBrowser = CookiedCefBrowser.CreateNewWebBrowser(searchUrl, handlerRequest) .ConfigureAwait(false) .GetAwaiter() .GetResult(); } else { //必须等待页面加载完毕,否则过期的Cookie无法刷新到最新 mixdBrowser.CefLoader.LoadEnd += handlerRequest; mixdBrowser.CefBrowser.GetMainFrame().LoadUrl(searchUrl); } //回调终结请求阻塞 TimerCallback resetHandler = (state) => { //对于超时的 直接杀死render 进程 if (isProcessRequestEnd == true) { return; } disposeHandler("timeout"); }; //超时监听 var timeBong = new System.Threading.Timer(resetHandler, null, timeOut, Timeout.Infinite); //进入当前线程锁定模式 waitHandler.WaitOne(); mixdBrowser.Dispose(); //线程后续执行后,表示任务完毕或者超时,释放定时器资源 timeBong.Dispose(); return(tcs.Task); } catch (Exception ex) { Logger.Error(ex); } return(Task.FromResult <string>(string.Empty)); }