当前位置:首页 > Windows程序 > 正文

WinForm窗体程序中使用CefSharp获取加载后的资源、截取request参数、拦截response数据

2024-03-31 Windows程序

源码地址:源代码csdn  或者底部qq问我要

四、cefsharp截取request参数

所有的request数据都可以在接口类IRequestHandler的方法中获取到,不过要先实现这些方法。

1、添加类 RequestHandler,继承IRequestHandler,实现接口中的各种方法

public class RequestHandler : IRequestHandler { /// <inheritdoc/> bool IRequestHandler.OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { return OnBeforeBrowse(chromiumWebBrowser, browser, frame, request, userGesture, isRedirect); } /// <summary> /// Called before browser navigation. If the navigation is allowed <see cref="IWebBrowser.FrameLoadStart"/> and /// <see cref="IWebBrowser.FrameLoadEnd"/> /// will be called. If the navigation is canceled <see cref="IWebBrowser.LoadError"/> will be called with an ErrorCode value of /// <see cref="CefErrorCode.Aborted"/>. /// </summary> /// <param>the ChromiumWebBrowser control.</param> /// <param>the browser object.</param> /// <param>The frame the request is coming from.</param> /// <param>the request object - cannot be modified in this callback.</param> /// <param>The value will be true if the browser navigated via explicit user gesture (e.g. clicking a link) or /// false if it navigated automatically (e.g. via the DomContentLoaded event).</param> /// <param>has the request been redirected.</param> /// <returns> /// Return true to cancel the navigation or false to allow the navigation to proceed. /// </returns> protected virtual bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { return false; } /// <inheritdoc/> bool IRequestHandler.OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) { return OnOpenUrlFromTab(chromiumWebBrowser, browser, frame, targetUrl, targetDisposition, userGesture); } /// <summary> /// Called on the UI thread before OnBeforeBrowse in certain limited cases where navigating a new or different browser might be /// desirable. This includes user-initiated navigation that might open in a special way (e.g. links clicked via middle-click or /// ctrl + left-click) and certain types of cross-origin navigation initiated from the renderer process (e.g. navigating the top- /// level frame to/from a file URL). /// </summary> /// <param>the ChromiumWebBrowser control.</param> /// <param>the browser object.</param> /// <param>The frame object.</param> /// <param>target url.</param> /// <param>The value indicates where the user intended to navigate the browser based on standard /// Chromium behaviors (e.g. current tab, new tab, etc).</param> /// <param>The value will be true if the browser navigated via explicit user gesture (e.g. clicking a link) or /// false if it navigated automatically (e.g. via the DomContentLoaded event).</param> /// <returns> /// Return true to cancel the navigation or false to allow the navigation to proceed in the source browser‘s top-level frame. /// </returns> protected virtual bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) { return false; } /// <inheritdoc/> IResourceRequestHandler IRequestHandler.GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) { return GetResourceRequestHandler(chromiumWebBrowser, browser, frame, request, isNavigation, isDownload, requestInitiator, ref disableDefaultHandling); } /// <summary> /// Called on the CEF IO thread before a resource request is initiated. /// </summary> /// <param>the ChromiumWebBrowser control.</param> /// <param>represent the source browser of the request.</param> /// <param>represent the source frame of the request.</param> /// <param>represents the request contents and cannot be modified in this callback.</param> /// <param>will be true if the resource request is a navigation.</param> /// <param>will be true if the resource request is a download.</param> /// <param>is the origin (scheme + domain) of the page that initiated the request.</param> /// <param>[in,out] to true to disable default handling of the request, in which case it will need /// to be handled via <see cref="IResourceRequestHandler.GetResourceHandler"/> or it will be canceled.</param> /// <returns> /// To allow the resource load to proceed with default handling return null. To specify a handler for the resource return a /// <see cref="IResourceRequestHandler"/> object. If this callback returns null the same method will be called on the associated /// <see cref="IRequestContextHandler"/>, if any. /// </returns> protected virtual IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) { return null; } /// <inheritdoc/> bool IRequestHandler.GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) { return GetAuthCredentials(chromiumWebBrowser, browser, originUrl, isProxy, host, port, realm, scheme, callback); } /// <summary> /// Called when the browser needs credentials from the user. /// </summary> /// <param>The ChromiumWebBrowser control.</param> /// <param>the browser object.</param> /// <param>is the origin making this authentication request.</param> /// <param>indicates whether the host is a proxy server.</param> /// <param>hostname.</param> /// <param>port number.</param> /// <param>realm.</param> /// <param>scheme.</param> /// <param>Callback interface used for asynchronous continuation of authentication requests.</param> /// <returns> /// Return true to continue the request and call <see cref="IAuthCallback.Continue(string, string)"/> when the authentication /// information is available. Return false to cancel the request. /// </returns> protected virtual bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) { callback.Dispose(); return false; } /// <inheritdoc/> bool IRequestHandler.OnQuotaRequest(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) { return OnQuotaRequest(chromiumWebBrowser, browser, originUrl, newSize, callback); } /// <summary> /// Called when JavaScript requests a specific storage quota size via the webkitStorageInfo.requestQuota function. For async /// processing return true and execute <see cref="IRequestCallback.Continue"/> at a later time to grant or deny the request or /// <see cref="IRequestCallback.Cancel"/> to cancel. /// </summary> /// <param>The ChromiumWebBrowser control.</param> /// <param>the browser object.</param> /// <param>the origin of the page making the request.</param> /// <param>is the requested quota size in bytes.</param> /// <param>Callback interface used for asynchronous continuation of url requests.</param> /// <returns> /// Return false to cancel the request immediately. Return true to continue the request and call /// <see cref="IRequestCallback.Continue"/> either in this method or at a later time to grant or deny the request. /// </returns> protected virtual bool OnQuotaRequest(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) { callback.Dispose(); return false; } /// <inheritdoc/> bool IRequestHandler.OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) { return OnCertificateError(chromiumWebBrowser, browser, errorCode, requestUrl, sslInfo, callback); } /// <summary> /// Called to handle requests for URLs with an invalid SSL certificate. Return true and call /// <see cref="IRequestCallback.Continue"/> either in this method or at a later time to continue or cancel the request. /// If CefSettings.IgnoreCertificateErrors is set all invalid certificates will be accepted without calling this method. /// </summary> /// <param>the ChromiumWebBrowser control.</param> /// <param>the browser object.</param> /// <param>the error code for this invalid certificate.</param> /// <param>the url of the request for the invalid certificate.</param> /// <param>ssl certificate information.</param> /// <param>Callback interface used for asynchronous continuation of url requests. If empty the error cannot be /// recovered from and the request will be canceled automatically.</param> /// <returns> /// Return false to cancel the request immediately. Return true and use <see cref="IRequestCallback"/> to execute in an async /// fashion. /// </returns> protected virtual bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) { callback.Dispose(); return false; } /// <inheritdoc/> bool IRequestHandler.OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback) { return OnSelectClientCertificate(chromiumWebBrowser, browser, isProxy, host, port, certificates, callback); } /// <summary> /// Called when the browser needs user to select Client Certificate for authentication requests (eg. PKI authentication). /// </summary> /// <param>The ChromiumWebBrowser control.</param> /// <param>the browser object.</param> /// <param>indicates whether the host is a proxy server.</param> /// <param>hostname.</param> /// <param>port number.</param> /// <param>List of Client certificates for selection.</param> /// <param>Callback interface used for asynchronous continuation of client certificate selection for /// authentication requests.</param> /// <returns> /// Return true to continue the request and call ISelectClientCertificateCallback.Select() with the selected certificate for /// authentication. Return false to use the default behavior where the browser selects the first certificate from the list. /// /// </returns> protected virtual bool OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback) { callback.Dispose(); return false; } /// <inheritdoc/> void IRequestHandler.OnPluginCrashed(IWebBrowser chromiumWebBrowser, IBrowser browser, string pluginPath) { OnPluginCrashed(chromiumWebBrowser, browser, pluginPath); } /// <summary> /// Called when a plugin has crashed. /// </summary> /// <param>the ChromiumWebBrowser control.</param> /// <param>the browser object.</param> /// <param>path of the plugin that crashed.</param> protected virtual void OnPluginCrashed(IWebBrowser chromiumWebBrowser, IBrowser browser, string pluginPath) { } /// <inheritdoc/> void IRequestHandler.OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser) { OnRenderViewReady(chromiumWebBrowser, browser); } /// <summary> /// Called on the CEF UI thread when the render view associated with browser is ready to receive/handle IPC messages in the /// render process. /// </summary> /// <param>The ChromiumWebBrowser control.</param> /// <param>the browser object.</param> protected virtual void OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser) { } /// <inheritdoc/> void IRequestHandler.OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status) { OnRenderProcessTerminated(chromiumWebBrowser, browser, status); } /// <summary> /// Called when the render process terminates unexpectedly. /// </summary> /// <param>The ChromiumWebBrowser control.</param> /// <param>the browser object.</param> /// <param>indicates how the process terminated.</param> protected virtual void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status) { } /// <inheritdoc/> void IRequestHandler.OnDocumentAvailableInMainFrame(IWebBrowser chromiumWebBrowser, IBrowser browser) { OnDocumentAvailableInMainFrame(chromiumWebBrowser, browser); } /// <summary> /// Called on the CEF UI thread when the window.document object of the main frame has been created. /// </summary> /// <param>the ChromiumWebBrowser control</param> /// <param>the browser object</param> protected virtual void OnDocumentAvailableInMainFrame(IWebBrowser chromiumWebBrowser, IBrowser browser) { } }

2、新建WinFormsRequestHandler类,再继承RequestHandler类,在WinFormsRequestHandler类中来写具体的获取request参数方法

比如,要获取百度登录的post参数

先F12查看此方法名称为login

技术图片

WinFormsRequestHandler类中重写覆盖父类中的方法GetResourceRequestHandler,并且只拦截请求url中有login名称的请求

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/43538.html

Jm-杰米博客Jamie
草根站长的技术交流乐园!IT不会不要紧快来好好学习吧!
  • 20786文章总数
  • 7494595访问次数
  • 建站天数
  • 友情链接