找了整整两天,在大海捞针之后,终于在上古代码中找到了一个可用的。。。。

可以用喜极而泣来形容测试有效之后的心情!!!

跟cefsharp相比geckofx最大的优点就是模式更接近于IE,包括node、xml、xpath以及单独设置cookie等。但是资料、问答等实在是太古老太古老了。

如果已入坑geckofx的朋友,请一定要记住,遇到问题先不用去满世界搜索,请第一时间去官网的 Issues 版块搜索关键字。

具体方法:https://bitbucket.org/geckofx/ -> 选择版本 ->左侧点击 Issues -> 右侧 Find Issues -> 右键谷歌翻译网页

最好每个版本里面都进去搜一下,我就是在上古时代的29.0里搜到的答案

文章原地址:https://bitbucket.org/geckofx/geckofx-29.0/issues/197/getting-content-on-observer-response

一、拦截响应:

1、具体代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Gecko.Net;
using Gecko.Observers;

namespace GeckofxWebBrowser.GeckofxExtension
    {
    public class MyObserver : BaseHttpModifyRequestObserver
        {
        public delegate void TicketLoadedEventHandler(HttpChannel p_HttpChannel, object sender, System.EventArgs e);
        /// <summary>
        /// 处理事件委托
        /// </summary>
        public event TicketLoadedEventHandler TicketLoadedEvent;
        /// <summary>
        /// 需要拦截的网址,只要独一无二的关键词既可
        /// </summary>
        public List<string> targetUrls = new List<string>() { };
        protected override void ObserveRequest(HttpChannel p_HttpChannel)
            {
            if (p_HttpChannel != null)
                {
                if (targetUrls.Any(s => p_HttpChannel.Uri.AbsoluteUri.Contains(s)))
                    {
                    TraceableChannel oTC = p_HttpChannel.CastToTraceableChannel();
                    StreamListenerTee oStream = new StreamListenerTee();
                    oStream.Completed += (sender, e) => TicketLoadedEvent(p_HttpChannel, sender, e);
                    oTC.SetNewListener(oStream);
                    }
                }
            }

//********************* TicketLoadedEvent 事件处理参考 *********************
        /// <summary>
        /// 主要是如何读取response数据,p_HttpChannel内可获取url、header等,header内应该也包含setcookie,没去测试
        /// </summary>
        /// <param name="p_HttpChannel"></param>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        //private void MyObserver_TicketLoadedEvent(HttpChannel p_HttpChannel, object sender, EventArgs e)
        //    {
        //    if (sender is StreamListenerTee)
        //        {
        //        StreamListenerTee oStream = sender as StreamListenerTee;
        //        byte[] aData = oStream.GetCapturedData();
        //        string sData = Encoding.UTF8.GetString(aData);
        //        }
        //    }

}
    }
2、使用方法:将拦截类加入到观察器

MyObserver MyObs = new MyObserver();
            MyObs.TicketLoadedEvent += MyObs_TicketLoadedEvent;//如何处理捕捉到的response
            MyObs.targetUrls = new List<string>() {“baidu.com”,“163.com” };//添加要拦截的url关键词
            ObserverService.AddObserver(MyObs);//添加观察器
           
        private void MyObs_TicketLoadedEvent(Gecko.Net.HttpChannel p_HttpChannel, object sender, EventArgs e)
            {
            if (sender is StreamListenerTee)
                {
                StreamListenerTee oStream = sender as StreamListenerTee;
                byte[] aData = oStream.GetCapturedData();
                string sData = Encoding.UTF8.GetString(aData);
                }
            }

二、如果要拦截请求

//在初始化的时候先设置这两样
browser.UseHttpActivityObserver = true;
browser.ObserveHttpModifyRequest += Browser_ObserveHttpModifyRequest;//
private void Browser_ObserveHttpModifyRequest(object sender, GeckoObserveHttpModifyRequestEventArgs e)
{
//在这里通过 e 的各项属性做具体处理,可以判断url,可以判断标头、包括post内容等
}

---------------------
作者:jwb7832007
来源:CSDN
原文:https://blog.csdn.net/jwb7832007/article/details/80884128
版权声明:本文为博主原创文章,转载请附上博文链接!

黄聪:C#使用GeckoFx拦截监控Http数据的更多相关文章

  1. 黄聪:wordpress向一个页面POST数据,出现404页面访问不了

    出现这个情况,说明POST的数据中存在一些关键词,触发调用了page以外的模版.比如POST数据中有 name , author 等参数. 解决办法,就是把这些参数改一下名称.

  2. 黄聪:Wordpress、PHP使用POST数据过大导致MySQL server has gone away报错原因分析

    错误原因: 当POST的数据超过 max_allowed_packet 就会报 MySQL server has gone away 的错误. 1.查看当前Mysql的 max_allowed_pac ...

  3. 黄聪:《跟黄聪学WordPress插件开发》

    续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...

  4. 黄聪:PHP使用Simple_HTML_DOM遍历、过滤及保留指定属性

    <? /* * 参考资料: * http://www.phpddt.com/manual/simplehtmldom_1_5/manual_api.htm * http://www.phpddt ...

  5. 黄聪:《跟黄聪学WordPress主题开发》

    又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...

  6. 黄聪:VS2010开发如何在c#中使用Ctrl、Alt、Tab等全局组合快捷键

    1.新建一个类 HotkeyHelper  using System; using System.Runtime.InteropServices; using System.Windows.Forms ...

  7. 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)

    先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...

  8. 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block 开发人员经常编写需要安全功能的应用程序.这些应用程序 ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 使用企业库异常处理应用程序模块的 ...

随机推荐

  1. windows平台python svn模块的一个小 bug

    环境 编程语言版本:python 2.7 操作系统:win10 64位 模块名:svn svn  checkout时报错 File "D:\Python27\lib\site-package ...

  2. JavaScript几种常见的继承方法

    1.call() 方法 call() 方法是与经典的对象冒充方法最相似的方法.它的第一个参数用作 this 的对象.其他参数都直接传递给函数自身 function Huster(name,idNum, ...

  3. 2019-04-19-day036-协程与进程池

    内容回顾 11:30 码云 :王老师检查作业+定期抽查 注册账号 考试的时间 threading.enumerate(),能够获取到当前正在运行的所有线程对象列表 守护线程 守护线程会等待所有的非守护 ...

  4. Java中next()和nextLine()的区别

    首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后 ...

  5. A The Empire Age

    1月28日 Description 帝国时代3是一款十分刺激的RTS游戏.你需要控制自己的一块殖民地,发展殖民地的经济和军事,最终打败其他殖民地.小L是这个游戏的狂热爱好者.一次小L打算打AI试试身手 ...

  6. L2-013 红色警报 (25 分)

    L2-013 红色警报 (25 分)   战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全 ...

  7. soapUI的安装及破解

    1.下载安装包 SoapUI SoapUI-Pro-x64-5.1.2.exe Protection-4.6.jar scz.key 2.安装SoapUI-Pro-x64-5.1.2.exe 3.拷贝 ...

  8. python库-Arrow处理时间

    Arrow是一个处理时间的python库,能一键转换dates/times/timestamps等时间格式而不需要大量导致各种时间模块和格式转换函数,十分快捷方便 使用Arrow需要两步转换操作: 1 ...

  9. TP5对数据库操作的事物作用

    假如: 你写好了一段完整的代码,模型对数据库的操作,增删改查什么的,都没有问题,当然运行速度也是最快的,完全不用担心会出错, 前提肯定是已经写好的一整段代码, 但是,万一服务器中断了呢,执行一半,后面 ...

  10. 《Spring实战》读书笔记——如何实现自动化装配

    加我微信公众号,一起夯实Java基础,向着诗和远方出发吧~ 如果所有的装配工作都交给Spring来自动完成,减少人工的干预,是不是就能减少依赖关系配置带来的麻烦呢?认真做自己的事儿吧,装配交给Spri ...