.NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求
关于Titanium.Web.Proxy详细信息可以去这里仔细看看,这里只记录简单用法
安装引用Titanium.Web.Proxy
NuGet直接获取Titanium.Web.Proxy
使用
- 配置
与其说是配置,不如就说这一部分就是未来你需要使用的部分,想知道具体每个部分是干什么的就去看原文链接全放过来太占地方
var proxyServer = new ProxyServer();
proxyServer.CertificateManager.CertificateEngine = Titanium.Web.Proxy.Network.CertificateEngine.DefaultWindows;
proxyServer.CertificateManager.EnsureRootCertificate();
proxyServer.BeforeResponse += OnResponse;
proxyServer.ServerCertificateValidationCallback += OnCertificateValidation;
proxyServer.ClientCertificateSelectionCallback += OnCertificateSelection;
var explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, 8000, true){ };
explicitEndPoint.BeforeTunnelConnect += OnBeforeTunnelConnect;
proxyServer.AddEndPoint(explicitEndPoint);
proxyServer.Start();
proxyServer.SetAsSystemHttpProxy(explicitEndPoint);
proxyServer.SetAsSystemHttpsProxy(explicitEndPoint);
Console.Read();
最后的Console.Read();是一个等待函数,你可以写一个其他函数代替或是直接不用,比如说一个鼠标点击事件或是等待时间啥的。
这部分配置就写进一个函数体中,到时想在哪里用代理就调用这个函数便可。
- 响应事件处理
private async Task OnBeforeTunnelConnectRequest(object sender, TunnelConnectSessionEventArgs e)
{
await Task.Run(() =>
{
});
}
这部分是接收到链接请求时需要做的事情就是个事件,想做什么就写在这个地方写,没有想做的就干脆直接不要。
事件问题去网上自己去学!。
public async Task OnResponse(object sender, SessionEventArgs e)
{
e.HttpClient.Response.Headers;
if (e.HttpClient.Request.Method == "GET" || e.HttpClient.Request.Method == "POST")
{
if (e.HttpClient.Response.StatusCode == 200)
{
}
}
if (e.UserData != null)
{
// 从存储在RequestHandler中的UserData属性的访问请求
var request = (Request)e.UserData;
}
}
这里就能对你想要的反应体进行操作了。
可以看到其中有两个if条件,第一个是Http请求动作方法,也就是说它在筛选GET和POST,如若想监控其他方法,改这个地方就好。
第二个if是对某一个状态的请求进行监控,示例代码中是状态200,也就是成功状态的请求。
public Task OnCertificateValidation(object sender, CertificateValidationEventArgs e)
{
if (e.SslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
e.IsValid = true;
return Task.CompletedTask;
}
public Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e)
{
return Task.CompletedTask;
}
这部分其实就是对证书验证之类的问题,无脑放进去就好了。
应用
接下来我举个栗子。
我想对要监控一个网页给我返回的数据,看看里面有没有一些有助于人类繁衍的神奇代号
这时候,你就可以这样写if(e.HttpClient.Request.RequestUri.ToString().StartsWith("这个地方写你需要监控的请求头")){ }
把这段扔进刚才说的OnResponse第二个if里就好了,然后在判断体里解析数据,把想要的数据写进一个文档里。这样在你浏览网页的时候,就可以边学习边记录,防止以后迷路辣。
当然过程可能会复杂那么一捏捏,但大体上是差不多的。
后记
本篇只写了关于反应体的捕获和处理,对于请求体也大差不差,自己捣鼓捣鼓吧
.NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求的更多相关文章
- .net core 源码解析-web app是如何启动并接收处理请求(二) kestrel的启动
上篇讲到.net core web app是如何启动并接受请求的,下面接着探索kestrel server是如何完成此任务的. 1.kestrel server的入口KestrelServer.Sta ...
- .net core 源码解析-web app是如何启动并接收处理请求
最近.net core 1.1也发布了,蹒跚学步的小孩又长高了一些,园子里大家也都非常积极的在学习,闲来无事,扒拔源码,涨涨见识. 先来见识一下web站点是如何启动的,如何接受请求,.net core ...
- 遇到 Error creating the Web Proxy specified in the 'system.net/defaultProxy' configuration section的解决办法
用记事本编辑*.EXE.config,在“<system.net>”节点加入<defaultProxy> <proxy usesystemdefault="Fa ...
- WinHTTP Web Proxy Auto-Discovery Service
下面是网上搜集的,个人没有做测试,----------------------------- WinHTTP Web Proxy Auto-Discovery Service 服务成功发送一个 开始 ...
- 002.Create a web API with ASP.NET Core MVC and Visual Studio for Windows -- 【在windows上用vs与asp.net core mvc 创建一个 web api 程序】
Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs与asp.net core mvc 创 ...
- ASP.NET Core MVC中构建Web API
在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...
- ROS创建Web代理(Web proxy)给QQ使用HTTP代理
使用Web代理可以提高网页的访问速度,因为访问的数据会存储在内存或是硬盘中,就会直接从代理服务器中读取.同时,为了提高网络访问的安全性,可以给Web代理服务器设置相应的权限,使它的安全性得到提高. 下 ...
- javascript使用web proxy来实现ajax cross-domain通信
在现代浏览器中,都强加了对javacript代码的访问限制,比如一个页面的js无法向非同源的url实现ajax请求,获得数据.在这时,是浏览器端会报错: No 'Access-Control-Allo ...
- asp.net core 3.0获取web应用的根目录
目录 1.需求 2.解决方案 1.需求 asp.net core 3.0的web项目中,在controller中,想要获取wwwroot下的imgs/banners文件夹下的所有文件: 在传统的asp ...
- Python3网络学习案例四:编写Web Proxy
代理服务器的定义和作用请走百度百科~ 1. Web Proxy的实现思路 这是基于上一篇"编写Web Server"写的,主要逻辑见下图: 我们要写的就是中间的Web Proxy部 ...
随机推荐
- cron语句
名称 是否必须 允许值 特殊字符 秒 是 0-59 , - * / 分 是 0-59 , - * / 时 是 0-23 , - * / 日 是 1-31 , - * ? / L W C 月 是 1-1 ...
- mongodb安装及操作
1.回顾 node服务器的写法 服务器 前后端分离 前后端不分离 express express生成器 ejs模版语法:变量.条件判断.循环渲染.引入 2.mongodb介绍 MongoDB 是一个基 ...
- 如何在 SpringBoot 项目中接入 ChartGPT
大家好,我是公子骏.最近体验了火爆全网的 ChartGPT,深刻体会了其强大的能力,这让我们程序猿对AI的未来突然有了广大的畅想空间. 我也在网上看到不少大牛通过 ChartGPT 来获取收益,就寻思 ...
- CentOS安装时钟同步服务
使用chrony用于时间同步 yum install chrony -y vim /etc/chrony.conf cat /etc/chrony.conf | grep -v "^#&qu ...
- 【Vue原理模拟】模拟Vue实现响应式数据
1. 预期效果 当数据变动时,触发自定义的回调函数. 2. 思路 对对象 object 的 setter 进行设置,使 setter 在赋值之后执行回调函数 callback(). 3.细节 3.1 ...
- Redis 源码解析之通用双向链表(adlist)
Redis 源码解析之通用双向链表(adlist) 概述 Redis源码中广泛使用 adlist(A generic doubly linked list),作为一种通用的双向链表,用于简单的数据集合 ...
- Yii framework 应用小窍门
Yii framework 应用小窍门 1. Yii Framework] 如何获取当前controller的名称? 下面语句就可以获取当前控制器的名称了! Php代码 Yii::app ...
- PyTorch实践模型训练(Torchvision)
模型训练的开发过程可以看作是一套完整的生产流程,这些环节包括: 数据读取.网络设计.优化方法与损失函数的选择以及一些辅助的工具等,TorchVision是一个和PyTorch配合使用的Python包, ...
- css实现水平垂直居中的几种方法
一,已知宽高 1 <style> 2 #box { 3 height: 400px; 4 width: 400px; 5 border: 1px solid grey; 6 positio ...
- 当 SQL Server(mssql-jdbc) 遇上 BigDecimal → 精度丢失,真坑!
开心一刻 中午和哥们一起喝茶 哥们说道:晚上喝酒去啊 我:不去,我女朋友过生日 哥们瞪大眼睛看着我:你有病吧,充气的过什么生日 我生气到:有特么生产日期的好吧 需求背景 系统对接了外部系统,调用外部系 ...