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

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

跟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. 石头的Xcode学习列表

    http://www.cnblogs.com/JangoJing/tag/xcode/

  2. SQA计划与系统测试

    (一)目的 本计划的目的是定义我们该小组所做的“爱上长大”项目的SQA任务和职责,在项目过程中应遵循的流程.规范和约定等,以确保软件质量得到维持. (二)范围 本计划应用于“爱上长大”项目开发的整个生 ...

  3. linux之文件权限+用户权限

    chmod 文件权限命令: 文件权限: r是否能查看文件内容 w是否能修改文件的内容,需要与r权限配合使用   只有w的时候vim强制修改文件内容,会导致源文件内容清空 x是否能运行命令或脚本权限,需 ...

  4. 第一次玩博客,今天被安利了一个很方便JDBC的基于Spring框架的一个叫SimpleInsert的类,现在就来简单介绍一下

    首先先对这段代码的简单介绍,我之前在需要操作JDBC的时候总是会因为经常要重新写SQL语句感到很麻烦.所以就能拿则拿不能拿的就简单地封装了一下. 首先是Insert.Spring框架的JDBC包里面的 ...

  5. JavaScript Node节点笔记

    1. 节点及其类型: 1). 元素节点 2). 属性节点: 元素的属性, 可以直接通过属性的方式来操作. 3). 文本节点: 是元素节点的子节点, 其内容为文本. 2. 在 html 文档的什么位置编 ...

  6. ROS使用FLIR品牌的相机

    本文介绍如何将FLIR品牌的相机应用于ROS系统,将相机实时的数据以rostopic实时广播: 系统平台:Ubuntu16.04 LTS   ROS Kinetic 依赖:OpenCV(本例中所用版本 ...

  7. 【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw 实现两个数据库之间数据交互操作(二)

    一 新的可视化工具 因为前文所提到的,看不到外部服务器和外部表的问题,我更换了可视化工具. 好用的新工具PostgreSQL Maestro! 当然如此好用的工具不是免费的,如果想免费使用还请自己去找 ...

  8. Beta发布用户使用报告

    用户数量:13人 姓名如下(包括化名):张小斌.王瑞瑞.蛋蛋.小美.晨曦.小丽.张利刚.小闫.小谢.小崔.小欢欢.小胡胡.小霞霞 寻找的用户多为王者荣耀交流协会成员的同学,对PSP Daily软件有极 ...

  9. web3js 进行转账

    1.准备阶段 部署以太坊geth 安装nodejs npm install web3 npm install npm install ethereumjs-tx 其中, web3是1.0.0.beta ...

  10. 利用python执行shell脚本 并动态传参 及subprocess基本使用

    最近工作需求中 有遇到这个情况  在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法   最后还是选择了subprocess这个python标准库 su ...