.NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求

  • .NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求已关闭评论
  • 111 次浏览
  • A+
所属分类:.NET技术
摘要

关于Titanium.Web.Proxy详细信息可以去这里仔细看看,这里只记录简单用法NuGet直接获取Titanium.Web.Proxy


关于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请求动作方法,也就是说它在筛选GETPOST,如若想监控其他方法,改这个地方就好。

第二个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里就好了,然后在判断体里解析数据,把想要的数据写进一个文档里。这样在你浏览网页的时候,就可以边学习边记录,防止以后迷路辣?。

当然过程可能会复杂那么一捏捏,但大体上是差不多的。

后记

本篇只写了关于反应体的捕获和处理,对于请求体也大差不差,自己捣鼓捣鼓吧