黄聪:C#使用GeckoFx拦截监控Http数据
找了整整两天,在大海捞针之后,终于在上古代码中找到了一个可用的。。。。
可以用喜极而泣来形容测试有效之后的心情!!!
跟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数据的更多相关文章
- 黄聪:wordpress向一个页面POST数据,出现404页面访问不了
出现这个情况,说明POST的数据中存在一些关键词,触发调用了page以外的模版.比如POST数据中有 name , author 等参数. 解决办法,就是把这些参数改一下名称.
- 黄聪:Wordpress、PHP使用POST数据过大导致MySQL server has gone away报错原因分析
错误原因: 当POST的数据超过 max_allowed_packet 就会报 MySQL server has gone away 的错误. 1.查看当前Mysql的 max_allowed_pac ...
- 黄聪:《跟黄聪学WordPress插件开发》
续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...
- 黄聪:PHP使用Simple_HTML_DOM遍历、过滤及保留指定属性
<? /* * 参考资料: * http://www.phpddt.com/manual/simplehtmldom_1_5/manual_api.htm * http://www.phpddt ...
- 黄聪:《跟黄聪学WordPress主题开发》
又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...
- 黄聪:VS2010开发如何在c#中使用Ctrl、Alt、Tab等全局组合快捷键
1.新建一个类 HotkeyHelper using System; using System.Runtime.InteropServices; using System.Windows.Forms ...
- 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)
先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block 开发人员经常编写需要安全功能的应用程序.这些应用程序 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 使用企业库异常处理应用程序模块的 ...
随机推荐
- 字符串a-b
#include<iostream> #include<stdio.h> #include<algorithm> #include<cmath> #in ...
- 泊爷带你学go -- 反射的经典玩法
package main import ( "fmt" "reflect" ) type order struct { ordId int customerId ...
- Python 从入门到实践 试一试 参考代码
这两天学习Python 看了python从入门到实践的书籍,里面有课后题“试一试” 然后就跟着写了,代码在以下地址,如果需要自取 https://files.cnblogs.com/files/fud ...
- 关于第一次在IDEA上使用lombok时注解完全不起作用
当你第一次在IDEA上使用lombok这个工具包时,如果你没有在setting--->Plugins-->Marketplace-->安装Lombok plugin 同时设置 Set ...
- Eureka的初识
在bili看完spring cloud eureka高可用注册中心的视频以后总结: 正常开发中,肯定有一个功能聚集服务中心,将功能方法全部写入其中,也就是一个springboot项目.该服务配置如下: ...
- VmwareTools以及搜狗拼音的安装
已经那么多年工作下来了,结果装linux还是那么 的费劲! 装的是纯净版Ubuntu16.04版本,17.04怕不稳定就没装, 装了发现VmwareTools是暗的,以前也遇到过这个问题,但是真的忘记 ...
- Mac pip install mysql-python
首次在mac os 下,用pip install MySQL-Python时经常出现如下错误: sh: mysql_config: command not foundTraceback (most r ...
- Mysql数据库账户权限设置
1.修改mysql数据库的root密码: 修改 数据库.表名 SET password=加密(‘密码’) where user=’root’; UPDATE mysql.user SET passwo ...
- 前端---JQuery初识
---恢复内容开始--- BOM JQuery认识 JQuery基本选择器 JQuery高级选择器 1.javascript基础部分包括三个部分: ECMAScript:JavaScript的语法标准 ...
- maya模板lock工具
#lockTemple import maya.cmds as mcimport stringif mc.window('LockWin',ex=1)==1: mc.deleteUI(' ...