Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用CEfSharp之旅(6)拦截网络请求 截取get post response返回「建议收藏」

使用CEfSharp之旅(6)拦截网络请求 截取get post response返回「建议收藏」

作者头像
全栈程序员站长
发布于 2022-09-27 07:09:40
发布于 2022-09-27 07:09:40
2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

主要是继承实现 Cefsharp的IRquestHandler对象,

废话不多说上代码:

工作随笔,有需要的或者不懂的加我QQ群191065815 微信huo_cheng_yan

源码下载地址:点击 下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  public class request : IRequestHandler
    {

        public event Action<string> msg;
        public event Action<string, object> msg2;
        public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy,
            string host, int port, string realm, string scheme, IAuthCallback callback)
        {

            return false;
        }

        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;
        }
        private void Filter_VOIDFUN(string arg1, string arg2, string arg3, long arg4)
        {
            msg2?.Invoke(arg1, arg2);
        }


        public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request,
            bool isRedirect)
        {

            var m = request.Method;
            msg?.Invoke(request.Url);
            msg?.Invoke(m);
            if (request.Method == "POST")
            {
                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);
                                msg?.Invoke(body);
                            }
                        }
                    }
                }
            }

            return false;
        }

        public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
        {
            var m = request.Method;
            msg?.Invoke(request.Url);
            msg?.Invoke(m);
            if (request.Method == "POST")
            {
                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);
                                msg?.Invoke(body);
                            }
                        }
                    }
                }
            }

            return CefReturnValue.Continue;
        }

        public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
        {
            return true;
        }

        public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
        {
            return false;
        }

        public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
        {

        }

        public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
        {
            return false;
        }

        public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
        {
            return false;
        }

        public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
        {

        }

        public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
        {

        }

        public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
        {
          
        }

        public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl)
        {

        }

        public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl)
        {

        }

        public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
        {
            return false; ;

        }

        public bool OnSelectClientCertificate(IWebBrowser browserControl, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback)
        {
            return true;
        }
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public class FilterManager
    {
        private static Dictionary<string, IResponseFilter> dataList = new Dictionary<string, IResponseFilter>();

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

                return filter;
            }
        }

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/193240.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CefSharp 中过滤图片 RequestHandler
具体内同参照 附录;将 OnBeforeResourceLoad方法替换成2中的内容,很简单;
全栈程序员站长
2022/11/04
9620
CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」
CefSharp是做什么用的?请看前一篇文章:怎么用c#编写浏览器或者执行javascript代码?
全栈程序员站长
2022/10/02
8890
CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」
CefSharp中文帮助文档「建议收藏」
CefSharp是围绕Chromium嵌入式框架( Chromium Embedded Framework,CEF)的.Net包装器。CEF是一个基于Google Chromium项目的开源项目。与Chromium项目本身(主要专注于Google Chrome应用程序开发)不同,CEF专注于促进第三方应用程序中的嵌入式浏览器用例。 CEF基于多进程Chromium Content API,因此,当前仅存在Chromium的部分功能。例如,对扩展的支持是有限的,仅实现了一部分Extension API。
全栈程序员站长
2022/11/04
14.2K0
CefSharp请求资源拦截及自定义处理
在CefSharp中,我们不仅可以使用Chromium浏览器内核,还可以通过Cef暴露出来的各种Handler来实现我们自己的资源请求处理。
w4ngzhen
2023/10/18
1.5K0
CefSharp请求资源拦截及自定义处理
CefSharp自定义缓存实现
上文介绍了《C# 使用 CefSharp 内嵌网页 - 并给出 C# 与 JS 的交互示例》,本文介绍 CefSharp 的缓存实现,先来说说添加缓存的好处:
沙漠尽头的狼
2023/04/26
1.5K0
ManualResetEvent实现线程的暂停与恢复
前些天遇到一个需求,在没有第三方源码的情况下,刷新一个第三方UI,并且拦截到其ajax请求的返回结果。当结果为AVALIABLE的时候,停止刷新并语音提示,否则继续刷新。
Chester Chen
2022/08/18
9010
ManualResetEvent实现线程的暂停与恢复
WPF中使用CEFSharp加载网页及交互
几种方案都各有利弊,可以根据团队的情况选用,都是相对不错的,其他的方案比如Flutter,Java就不太推荐。
码客说
2021/11/01
5K0
WPF中使用CEFSharp加载网页及交互
cefsharp教程_常见的数据分析方法有哪些
本节汇总一些关于cefsharp的使用方法,包括c#调用HTML页面中的js,也可以是HTML中的按钮调用c#的方法。汇总后,方便以后使用和查看。
全栈程序员站长
2022/09/29
1.9K0
cefsharp教程_常见的数据分析方法有哪些
UnityWebRequest 通过Post方式发起网络请求
可见数据结构中包含了4个string类型的字段,首先定义数据结构,注意字段名和字段类型需要保持一致,否则导致无法正确解析数据。
CoderZ
2022/08/29
2.8K0
UnityWebRequest 通过Post方式发起网络请求
封装Unity的网络请求中常用功能
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
1.6K0
WPF开发-网络请求
使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。
码客说
2022/09/02
2.5K0
全面分析前端的网络请求方式
这种交互的的缺陷是显而易见的,任何和服务器的交互都需要刷新页面,用户体验非常差, Ajax的出现解决了这个问题。 Ajax全称 AsynchronousJavaScript+XML(异步 JavaScript和 XML)
ConardLi
2019/05/23
1.9K0
利用iframe+from表单实现跨域上传文件
一、需要的材料 客户端需要一个HTML页面A其中包含一个iframe和一个form表单,一个页面B(我称之为客户端代理)里面包含对返回参数的处理; 服务端需要一个asp.net的一般处理程序用来处理上
用户1719978
2018/07/05
2.2K0
C# Post数据或文件到指定的服务器进行接收
不同的接口服务器处理不同的应用,我们会在实际应用中将A服务器的数据提交给B服务器进行数据接收并处理业务。
初九之潜龙勿用
2024/06/20
1450
C# Post数据或文件到指定的服务器进行接收
使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录
在asp.net mvc 中 webapi 和 mvc 处理消息是两个不同的管道,Asp.net mvc 和 webapi 为我们提供的 ActionFilterAttribute 拦截器,通过 重写 OnActionExecutingAsync,来 拦截action的请求消息,当执行OnActionExecutingAsync完成以后才真正进入请求的action中,action运行完后又把控制权给了 OnActionExecutedAsync ,这个管道机制可以使我们用它来轻松实现 权限认证、日志记录 ,跨域以及很多需要对全局或者部分请求做手脚的的功能。
yaphetsfang
2020/07/30
5K0
使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录
网络请求-Android篇(Okhttp和Retrofit)
  OkHttp是一个流行的开源Java和Android应用程序的HTTP客户端。它由Square Inc.开发,提供了一种简单高效的方式来进行应用程序中的HTTP请求。要在Java或Android项目中使用OkHttp,您需要将OkHttp依赖项添加到您的build.gradle文件中。然后,您可以创建一个OkHttpClient实例,并使用它来进行HTTP请求。OkHttp提供了各种类和方法,用于构建和执行请求、处理响应。使用OkHttp的时候,需要引入:implementation 'com.squareup.okhttp3:okhttp:4.10.0',别忘了添加网络权限!
故乡的樱花开了
2023/10/22
1.6K0
JQuery-命令速查-CheatSheet
http://stackoverflow.com/questions/31379409/form-submission-causing-maximum-call-stack-size-exceeded
szhshp
2022/09/21
9.9K0
JS跨域请求解决方案
同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等攻击。所谓同源是指”协议+域名+端口”三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
码客说
2019/10/22
5.2K0
C#客户端使用 http form的post方法提交图片
一、封装的类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; namespace WpfApplication1 { public static class FormUpload { private stati
用户8671053
2021/11/02
2.1K0
不能显式拦截ajax请求的302响应?
记录工作中早该加深印象的一个小小小case:ajax请求不能显式拦截 302响应。
有态度的马甲
2023/10/06
3070
不能显式拦截ajax请求的302响应?
相关推荐
CefSharp 中过滤图片 RequestHandler
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档