using CefSharp; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp1.utils.tb { delegate void TBCookieDelegate(Dictionary cookiesMap, String cookies,String url); class TBLoginRequestHandler : IRequestHandler { private TBCookieDelegate tbCookieDelegate; private String mark; public TBLoginRequestHandler(String mark, TBCookieDelegate tbCookieDelegate) { this.mark = mark; this.tbCookieDelegate = tbCookieDelegate; } public class CookieVisitor : ICookieVisitor { private Dictionary cookiesMap = new Dictionary(); private TBCookieDelegate tbCookieListener; private String url; public CookieVisitor(String url) { this.url = url; } public void setTBCookieListener(TBCookieDelegate tbCookieListener) { this.tbCookieListener = tbCookieListener; } public void Dispose() { } public bool Visit(Cookie cookie, int count, int total, ref bool deleteCookie) { cookiesMap.Add(cookie.Name, cookie.Value); if (count + 1 >= total) this.success(); return true; } //cookies获取成功 private void success() { String cookies = ""; StringBuilder sb = new StringBuilder(""); foreach (KeyValuePair kvp in cookiesMap) { sb.Append(kvp.Key + "=" + kvp.Value + ";"); } cookies = sb.ToString(); if (cookies.EndsWith(";")) cookies = cookies.Substring(0, cookies.Length - 1); Console.WriteLine(cookies); if (cookiesMap.ContainsKey("login")) tbCookieListener(cookiesMap, cookies,url); } } public IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) { if (request.Url.StartsWith(this.mark)) { Console.WriteLine("cookie开始"); CookieVisitor cookieVisitor = new CookieVisitor(request.Url); cookieVisitor.setTBCookieListener(tbCookieDelegate); chromiumWebBrowser.GetCookieManager().VisitUrlCookies(request.Url, true, cookieVisitor); Console.WriteLine("cookie结束"); } return null; } public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { return false; } public bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) { return true; } public bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) { return false; } public void OnPluginCrashed(IWebBrowser chromiumWebBrowser, IBrowser browser, string pluginPath) { } public bool OnQuotaRequest(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) { return true; } public void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status) { } public void OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser) { } public bool OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback) { return true; } bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) { return true; } bool IRequestHandler.GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) { return true; } } }