.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
里就好了,然后在判断体里解析数据,把想要的数据写进一个文档里。这样在你浏览网页的时候,就可以边学习边记录,防止以后迷路辣??。
当然过程可能会复杂那么一捏捏,但大体上是差不多的。
后记
本篇只写了关于反应体的捕获和处理,对于请求体也大差不差,自己捣鼓捣鼓吧