cefsharp入坑实践3

博客围绕浏览器拦截问题展开,给出解决方案是加入自定义的资源处理器。详细展示了自定义请求处理器和响应过滤器的代码,包括判断请求 URL 条件、处理输入输出流等内容,还给出了代码的参考来源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

关于浏览器拦截的问题,解决方案是加入自定义的资源处理器,代码如下:

//设置自定义的资源处理器工厂
// browser.ResourceHandlerFactory = new MyResourceHandlerFactory();
var request = new MyRequestHandler();
(browser as IWebBrowser).RequestHandler = new MyRequestHandler();

 

/// <summary>
/// 自定义请求处理器(涉及到敏感信息的,用internal类型)
/// </summary>
internal class MyRequestHandler : CefSharp.Handler.DefaultRequestHandler
{

public override IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
{
if (request.Url.StartsWith("file") && request.Url.EndsWith(".png") && request.Url.IndexOf("/png/") > 0)
{
string keyfile= request.Url.Substring(0, request.Url.Length - 4) + ".key";
keyfile = keyfile.Substring(8);
if (File.Exists(keyfile))
//此处判断当需要对response进行额外处理时,返回一个Filter实例。(判断语法仅供参考)
return new MyResponseFilter();
else
return base.GetResourceResponseFilter(browserControl, browser, frame, request, response);
}
else
return base.GetResourceResponseFilter(browserControl, browser, frame, request, response);
}

}


/// <summary>
/// 自定义响应过滤器(涉及到敏感信息的,用internal类型)
/// </summary>
internal class MyResponseFilter : IResponseFilter
{
int _filterindex = 0;
public MyResponseFilter()
{

}

public void Dispose()
{
}

/// <summary>
/// 获取输入流,经过处理后,写到输出流
/// </summary>
/// <param name="dataIn">输入流</param>
/// <param name="dataInRead">从输入流中读取的数量</param>
/// <param name="dataOut">输出流</param>
/// <param name="dataOutWritten">写入输出流的数量</param>
/// <returns></returns>
public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten)
{
//注意,除本函数内,其它任何位置不得引用dataIn,dataOut
if (dataIn == null)
{
dataInRead = 0;
dataOutWritten = 0;

return FilterStatus.Done;
}

//若有更复杂的加密方式,处理方式应该类似

dataIn.CopyTo(dataOut);
dataInRead = dataIn.Length;
dataOutWritten = Math.Min(dataInRead, dataOut.Length);
_filterindex++;
return FilterStatus.NeedMoreData;
}

public bool InitFilter()
{
return true;
}
}

转载于:https://www.cnblogs.com/talentsnail/p/11058100.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值