You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
8.2 KiB
250 lines
8.2 KiB
using CefSharp;
|
|
using CefSharp.Handler;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Windows;
|
|
using 齐越慧眼.UserControls;
|
|
|
|
namespace 齐越慧眼.cefhelper
|
|
{
|
|
|
|
public class MyRequestHandler : RequestHandler
|
|
{
|
|
|
|
protected override bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture,
|
|
bool isRedirect)
|
|
{
|
|
// 先调用基类的实现,断点调试
|
|
return base.OnBeforeBrowse(chromiumWebBrowser, browser, frame, request, userGesture, isRedirect);
|
|
}
|
|
|
|
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame,
|
|
IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
|
|
{
|
|
|
|
// 先调用基类的实现,断点调试
|
|
return base.GetResourceRequestHandler(
|
|
chromiumWebBrowser, browser, frame, request, isNavigation,
|
|
isDownload, requestInitiator, ref disableDefaultHandling);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public class MyResourceRequestHandlerFactory : ResourceRequestHandlerFactory
|
|
{
|
|
public MyResourceRequestHandlerFactory(BrowerControl brower)
|
|
{
|
|
Brower = brower;
|
|
}
|
|
|
|
|
|
public MyResourceRequestHandlerFactory(SomeBrowerControl brower)
|
|
{
|
|
Brower2 = brower;
|
|
}
|
|
|
|
public SomeBrowerControl Brower2;
|
|
public BrowerControl Brower;
|
|
|
|
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
|
|
{
|
|
if (Brower != null)
|
|
{
|
|
return new MyResourceRequestHandler(Brower);
|
|
}
|
|
|
|
return new MyResourceRequestHandler(Brower2);
|
|
}
|
|
}
|
|
|
|
public class MyResourceRequestHandler : ResourceRequestHandler
|
|
{
|
|
public MyResourceRequestHandler(BrowerControl brower)
|
|
{
|
|
Brower = brower;
|
|
}
|
|
public MyResourceRequestHandler(SomeBrowerControl brower)
|
|
{
|
|
Brower2 = brower;
|
|
}
|
|
|
|
public SomeBrowerControl Brower2;
|
|
public BrowerControl Brower;
|
|
protected override bool OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
|
|
{
|
|
if (Brower != null)
|
|
Brower.OnUrlEnd(request.Url);
|
|
else
|
|
Brower2.OnUrlEnd(request.Url);
|
|
|
|
return base.OnResourceResponse(chromiumWebBrowser, browser, frame, request, response);
|
|
}
|
|
|
|
//https://static.pddpic.com/assets/css/widgets_ba9e42522602b85cbbbc.css
|
|
//max-width:768px
|
|
|
|
protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
|
|
{
|
|
if (!request.Url.Contains("mobile.yangkeduo.com/login.html"))
|
|
{
|
|
if (request.Url.Contains("yangkeduo"))
|
|
{
|
|
request.SetHeaderByName("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63070517)", true);
|
|
}
|
|
}
|
|
return base.OnBeforeResourceLoad(chromiumWebBrowser, browser, frame, request, callback);
|
|
}
|
|
|
|
protected override IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
|
|
{
|
|
if (request.Url.Contains("https://static.pddpic.com/assets/css/SearchResultTab") ||request.Url.StartsWith("https://static.pddpic.com/assets/css/SearchBar2")||request.Url.StartsWith("https://static.pddpic.com/assets/css/widgets"))
|
|
{
|
|
if(!request.Url.StartsWith("data:text/html"))
|
|
{
|
|
var fil = new MyResponseFilter(true, Brower, request.Url);
|
|
return fil;
|
|
}
|
|
}
|
|
|
|
return base.GetResourceResponseFilter(chromiumWebBrowser, browser, frame, request, response);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public class MyResponseFilter : IResponseFilter
|
|
{
|
|
public BrowerControl Brower;
|
|
private string Url;
|
|
public MyResponseFilter(bool _filter, BrowerControl brower, string url) { filter = _filter; Brower = brower; Url = url; }
|
|
|
|
bool Disposed = false;
|
|
/// <summary>
|
|
/// 是否过滤,如果不过滤就截获
|
|
/// </summary>
|
|
bool filter = false;
|
|
private MemoryStream memoryStream;
|
|
public void Dispose()
|
|
{
|
|
//memoryStream?.Dispose();
|
|
//memoryStream = null;
|
|
}
|
|
public void Dispose(bool r)
|
|
{
|
|
if (Disposed)
|
|
return;
|
|
if (r)
|
|
{
|
|
memoryStream?.Dispose();
|
|
memoryStream = null;
|
|
}
|
|
Disposed = true;
|
|
}
|
|
|
|
public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten)
|
|
{
|
|
if (dataIn == null)
|
|
{
|
|
dataInRead = 0;
|
|
dataOutWritten = 0;
|
|
|
|
return FilterStatus.Done;
|
|
}
|
|
|
|
////Copy data to stream
|
|
dataIn.Position = 0;
|
|
dataIn.CopyTo(memoryStream);
|
|
byte[] response = null;
|
|
|
|
string json = DataStr.Replace(" .",".");
|
|
|
|
|
|
if (Url.Contains("https://static.pddpic.com/assets/css/SearchBar2")||Url.Contains("https://static.pddpic.com/assets/css/SearchResultTab"))
|
|
{
|
|
var matchs = Regex.Matches(json, ":(.*?)rem");
|
|
|
|
if (matchs.Count > 0)
|
|
{
|
|
matchs.ToList().ForEach(c =>
|
|
{
|
|
string px = c.Groups[1].Value;
|
|
if (px.StartsWith("."))
|
|
{
|
|
px = "0" + px;
|
|
}
|
|
|
|
decimal pxVal = 0;
|
|
if (decimal.TryParse(px, out pxVal))
|
|
{
|
|
json = json.Replace(c.Value, ":" + (pxVal * 100) + "px ");
|
|
}
|
|
});
|
|
}
|
|
matchs = Regex.Matches(json, " (.*?)rem");
|
|
|
|
if (matchs.Count > 0)
|
|
{
|
|
matchs.ToList().ForEach(c =>
|
|
{
|
|
string px = c.Groups[1].Value;
|
|
if (px.StartsWith("."))
|
|
{
|
|
px = "0" + px;
|
|
}
|
|
|
|
decimal pxVal = 0;
|
|
if (decimal.TryParse(px, out pxVal))
|
|
{
|
|
json = json.Replace(c.Value, " " + (pxVal * 100) + "px ");
|
|
}
|
|
});
|
|
}
|
|
|
|
if (Url.Contains("https://static.pddpic.com/assets/css/SearchResultTab"))
|
|
{
|
|
json = json.Replace(".gNxXM8Fs{top:.5rem;}", ".gNxXM8Fs{top:55px;}");
|
|
}
|
|
}
|
|
json = json.Replace("768px", "100%");
|
|
|
|
response = Encoding.GetEncoding("gb2312").GetBytes(json);
|
|
|
|
|
|
|
|
var ms = new MemoryStream(response);
|
|
ms.CopyTo(dataOut);
|
|
|
|
|
|
dataInRead = dataIn.Length;
|
|
dataOutWritten = response.Length;
|
|
|
|
|
|
|
|
return FilterStatus.Done;
|
|
}
|
|
|
|
public bool InitFilter()
|
|
{
|
|
memoryStream = new MemoryStream();
|
|
|
|
return true;
|
|
}
|
|
public byte[] Data
|
|
{
|
|
get { return memoryStream.ToArray(); }
|
|
}
|
|
|
|
public string DataStr
|
|
{
|
|
get { return Encoding.UTF8.GetString(memoryStream.ToArray()); }
|
|
}
|
|
|
|
}
|
|
}
|
|
|