cef拦截请求并获取数据

public class LifeSpanHandler : ILifeSpanHandler
    {
        public bool DoClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
            return true;
        }

        public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
        }

        public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
        }

        public bool OnBeforePopup(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
        {
            newBrowser = null;
            var chromium = (ChromiumWebBrowser)chromiumWebBrowser;
            chromium.Load(targetUrl);
            return true;
        }
    }


    //public class DDResFilter : IResponseFilter
    //{
    //    public List<byte> DataAll = new List<byte>();
    //    public void Dispose()
    //    {

    //    }

    //    public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten)
    //    {
    //        try
    //        {
    //            if (dataIn == null || dataIn.Length == 0)
    //            {
    //                dataInRead = 0;
    //                dataOutWritten = 0;

    //                return FilterStatus.Done;
    //            }

    //            dataInRead = dataIn.Length;
    //            dataOutWritten = Math.Min(dataInRead, dataOut.Length);

    //            dataIn.CopyTo(dataOut);
    //            dataIn.Seek(0, SeekOrigin.Begin);
    //            byte[] bs = new byte[dataIn.Length];
    //            dataIn.Read(bs, 0, bs.Length);
    //            DataAll.AddRange(bs);

    //            dataInRead = dataIn.Length;
    //            dataOutWritten = dataIn.Length;

    //            return FilterStatus.NeedMoreData;
    //        }
    //        catch (Exception ex)
    //        {
    //            dataInRead = dataIn.Length;
    //            dataOutWritten = dataIn.Length;

    //            return FilterStatus.Done;
    //        }
    //    }

    //    public bool InitFilter()
    //    {
    //        return true;
    //    }
    //}

    //public class FilterManager
    //{
    //    private static Dictionary<string, IResponseFilter> dataList = new Dictionary<string, IResponseFilter>();

    //    public static IResponseFilter CreateFilter(string guid)
    //    {
    //        lock (dataList)
    //        {
    //            var filter = new DDResFilter();
    //            dataList.Add(guid, filter);

    //            return filter;
    //        }
    //    }

    //    public static IResponseFilter GetFileter(string guid)
    //    {
    //        lock (dataList)
    //        {
    //            return dataList[guid];
    //        }
    //    }
    //}

    //public partial class BaseResRqtHandler : IResourceRequestHandler
    //{
    //    void IDisposable.Dispose()
    //    {
    //        Dispose();
    //    }
    //    protected virtual void Dispose()
    //    {

    //    }

    //    ICookieAccessFilter IResourceRequestHandler.GetCookieAccessFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request)
    //    {
    //        return GetCookieAccessFilter(chromiumWebBrowser, browser, frame, request);
    //    }

    //    protected virtual ICookieAccessFilter GetCookieAccessFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request)
    //    {
    //        return null;
    //    }

    //    IResourceHandler IResourceRequestHandler.GetResourceHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request)
    //    {
    //        return GetResourceHandler(chromiumWebBrowser, browser, frame, request);
    //    }

    //    protected virtual IResourceHandler GetResourceHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request)
    //    {
    //        return null;
    //    }

    //    IResponseFilter IResourceRequestHandler.GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    //    {
    //        return GetResourceResponseFilter(chromiumWebBrowser, browser, frame, request, response);
    //    }

    //    protected virtual IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    //    {
    //        return null;
    //    }

    //    CefReturnValue IResourceRequestHandler.OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
    //    {
    //        return OnBeforeResourceLoad(chromiumWebBrowser, browser, frame, request, callback);
    //    }

    //    protected virtual CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
    //    {
    //        return CefReturnValue.Continue;
    //    }

    //    bool IResourceRequestHandler.OnProtocolExecution(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request)
    //    {
    //        return OnProtocolExecution(chromiumWebBrowser, browser, frame, request);
    //    }

    //    protected virtual bool OnProtocolExecution(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request)
    //    {
    //        return false;
    //    }

    //    void IResourceRequestHandler.OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
    //    {
    //        OnResourceLoadComplete(chromiumWebBrowser, browser, frame, request, response, status, receivedContentLength);
    //    }

    //    protected virtual void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
    //    {

    //    }

    //    void IResourceRequestHandler.OnResourceRedirect(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl)
    //    {
    //        OnResourceRedirect(chromiumWebBrowser, browser, frame, request, response, ref newUrl);
    //    }

    //    protected virtual void OnResourceRedirect(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl)
    //    {

    //    }

    //    bool IResourceRequestHandler.OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    //    {
    //        return OnResourceResponse(chromiumWebBrowser, browser, frame, request, response);
    //    }

    //    protected virtual bool OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    //    {
    //        return false;
    //    }
    //}

    //public class DDResourceRequestHandler : BaseResRqtHandler
    //{
    //    protected override IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    //    {
    //        var filter = FilterManager.CreateFilter(request.Identifier.ToString());
    //        return filter;
    //    }

    //    protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
    //    {

    //        if (request.Url.ToLower().Contains("show".ToLower()))
    //        {
    //            var strResCookie = response.Headers["Set-Cookie"];
    //            if (strResCookie.IndexOf("wlfstk_smdl=") > -1)
    //            {
    //                JingdongMallDialogModel.strCookie = strResCookie;
    //            }
    //        }

    //        if (request.Url.ToLower().Contains("qrCodeTicketValidation".ToLower()))
    //        {
    //            var strResCookie = response.Headers["Set-Cookie"];
    //            if (strResCookie.IndexOf("thor=") > -1)
    //            {
    //                //CefDialog.strCookie = Regex.Match(strResCookie, @"(?<=dt_s=)(.+?)(?=;)").Groups[0].ToString();
    //                JingdongMallDialogModel.strCookie = Regex.Match(strResCookie, @"(?<=thor=)(.+?)(?=;)").Groups[0].ToString();
    //            }
    //            //var filter = FilterManager.GetFileter(request.Identifier.ToString()) as DDResFilter;
    //            //ASCIIEncoding encoding = new ASCIIEncoding();
    //            这里截获返回的数据
    //            //var data = encoding.GetString(filter.DataAll.ToArray());
    //        }
    //    }
    //}

    //public partial class DDRqtHandler : IRequestHandler
    //{
    //    public bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
    //    {
    //        return false;
    //    }

    //    public IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
    //    {
    //        String strUrl = request.Url.ToString();

    //        if (strUrl.Contains("https://passport.jd.com/uc/qrCodeTicketValidation?aksParamsU") || strUrl.Contains("https://qr.m.jd.com/show?appid=133&size=147&t="))
    //        {
    //            using (var postData = request.PostData)
    //            {
    //                if (postData != null)
    //                {
    //                    var elements = postData.Elements;

    //                    var charSet = request.GetCharSet();

    //                    foreach (var element in elements)
    //                    {
    //                        if (element.Type == PostDataElementType.Bytes)
    //                        {
    //                            var body = element.GetBody(charSet);
    //                        }
    //                    }
    //                }
    //            }
    //            return new DDResourceRequestHandler();
    //        }
    //        return null;
    //    }

    //    //public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    //    //{
    //    //    //if (!response.ResponseHeaders["Content-Type"].Contains("application/json"))
    //    //    //{
    //    //    //    return null;
    //    //    //}
    //    //    var filter = FilterManager.CreateFilter(request.Identifier.ToString());
    //    //    return filter;
    //    //}
    //    public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
    //    {
    //        String strUrl = request.Url.ToString();

    //        if (strUrl.IndexOf("https://login.dingtalk.com/login/createSessionInfoByTemp.jsonp?callback=jQuery") > -1)
    //        {
    //            int a = 0;
    //        }
    //        return false;
    //    }

    //    public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
    //    {
    //        //throw new NotImplementedException();
    //        //MessageBox.Show(request.Headers["User-Agent"]);//<span style="font-family: Arial, Helvetica, sans-serif;">这里弹出response</span>
    //        return CefReturnValue.Continue;
    //    }

    //    public bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
    //    {
    //        //throw new NotImplementedException();
    //        return false;
    //    }

    //    public void OnDocumentAvailableInMainFrame(IWebBrowser chromiumWebBrowser, IBrowser browser)
    //    {
    //        //throw new NotImplementedException();
    //    }

    //    public bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
    //    {
    //        //throw new NotImplementedException();
    //        return false;
    //    }

    //    public void OnPluginCrashed(IWebBrowser chromiumWebBrowser, IBrowser browser, string pluginPath)
    //    {
    //        //throw new NotImplementedException();
    //    }

    //    public bool OnQuotaRequest(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
    //    {
    //        //throw new NotImplementedException();
    //        return false;
    //    }

    //    public void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status)
    //    {
    //        //throw new NotImplementedException();
    //    }

    //    public void OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser)
    //    {
    //        //throw new NotImplementedException();
    //    }

    //    public bool OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback)
    //    {
    //        //throw new NotImplementedException();
    //        return false;
    //    }

    //    public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    //    {
    //        //throw new NotImplementedException();
    //        //MessageBox.Show(response.ResponseHeaders["Set-Cookie"]);//这里弹出response
    //        return false;
    //    }

    //}
 WebBrowser.LifeSpanHandler = new LifeSpanHandler();
            //WebBrowser.RequestHandler = new DDRqtHandler();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值