void IRequestHandler.OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { var args = new OnResourceLoadCompleteEventArgs(browserControl, browser, frame, request, response, status, receivedContentLength); OnResourceLoadCompleteEvent?.Invoke(this, args); }
public override void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (!request.Url.Contains("/kcsapi/") || response.MimeType != "text/plain") { return; } Debug.WriteLine($"response [MimeType:{response.MimeType} StatusCode:{response.StatusCode} StatusText:{response.StatusText} ErrorCode:{response.ErrorCode.ToString()}"); if (responseDic.TryGetValue(request.Identifier, out KcsapiResponseFilter filter)) { Debug.WriteLine("\n" + filter.jsonStr); var json = Utf8Json.JsonSerializer.Deserialize <dynamic>(filter.jsonStr); } }
public void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { try { #region baslangic if (durum = true) { if (File.Exists(dosya) == true) { satir = File.ReadAllLines(dosya); if (satir.Length > 0) { double i = ((100 - Convert.ToDouble(satir[2])) / 10) * 2; chromiumWebBrowser.SetZoomLevel(((100 - Convert.ToDouble(satir[2])) / 10) * 2); durum = false; } else { chromiumWebBrowser.SetZoomLevel(0); durum = false; } } } #endregion } catch (Exception) { } int code = response.StatusCode; // exit if frame is invalid (if the frame has closed, for example) if (!frame.IsValid) { return; } }
/// <summary> /// 在某个资源加载后触发 /// </summary> /// <param name="chromiumWebBrowser"></param> /// <param name="browser"></param> /// <param name="frame"></param> /// <param name="request"></param> /// <param name="response"></param> /// <param name="status"></param> /// <param name="receivedContentLength"></param> public void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (this.InterceptResourceLoadComplete != null) { this.InterceptResourceLoadComplete(chromiumWebBrowser, browser, frame, request, response, status, receivedContentLength); } }
protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (request.Method.Equals("POST") && request.Url.Contains("order_list")) { var filter = FilterManager.GetFileter(request.Identifier.ToString()) as TestJsonFilter; if (filter == null) { return; } ASCIIEncoding encoding = new ASCIIEncoding(); //这里截获返回的数据 var data = encoding.GetString(filter.DataAll.ToArray()); var orderList = JsonConvert.DeserializeObject <Order>(data); if (orderList.orders != null && orderList.orders.Count != 0) { Thread.Sleep(1000); FilterManager.AddOrder(orderList); //反向排序 orderList.orders.Reverse(); //获取第一个 var order = orderList.orders.FirstOrDefault(); string json = "{\"timeout\":1300,\"type\":\"all\",\"page\":1,\"pay_channel_list\":[\"9\",\"30\",\"31\",\"35\",\"38\",\"52\",\"97\",\"122\",\"135\",\"322\",\"-1\"],\"origin_host_name\":\"mobile.yangkeduo.com\",\"size\":10,\"offset\":\"#offset#\"}"; json = json.Replace("#offset#", order.order_sn); chromiumWebBrowser.Navigate(Encoding.Default.GetBytes(json), request); } } }
// // Summary: // Called on the CEF IO thread when a resource load has completed. // // Parameters: // frame: // The frame that is being redirected. // // request: // the request object - cannot be modified in this callback // // response: // the response object - cannot be modified in this callback // // status: // indicates the load completion status // // receivedContentLength: // is the number of response bytes actually read. public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (request.Url.Contains(".user.js")) { var code = browserControl.GetSourceAsync().ToString(); myForm.monyet.InstallScript(request.Url, code); } if (oldAddress != browserControl.Address || oldAddress == "") { oldAddress = browserControl.Address; Resources.Clear(); ResponseHeaders.Clear(); RequestHeaders.Clear(); } Dictionary <string, string> dictionary = response.Headers.AllKeys.ToDictionary((string x) => x, (string x) => response.Headers[x]); ResponseHeaders.Add(new HeaderWrapper(request.Identifier, dictionary)); Dictionary <string, string> strs = request.Headers.AllKeys.ToDictionary((string x) => x, (string x) => request.Headers[x]); RequestHeaders.Add(new HeaderWrapper(request.Identifier, strs)); if (responseDictionary.TryGetValue(request.Identifier, out MemoryStreamResponseFilter memoryStreamResponseFilter)) { byte[] data = memoryStreamResponseFilter.Data; Resources.Add(new RequestWrapper(request.Url, request.ResourceType, response.MimeType, data, request.Identifier)); } //var x = response.MimeType; //scrape all link on current web here //myForm.X.Appender(request.Url.GetQuery("path")); //myForm.X.Appender(request.Url + " = " + status); /* * if (request.Url.Contains(myForm.ViewsourceURL)) * { * * var code = myForm.viewer.View(request.Url.GetQuery("path")); * MessageBox.Show(code.ToString()); * var t = string.Format("var x = @{0}{1}{0};", '"', code); * t += string.Format("$({0}#xmpTagId{0}).text(x);", '"'); * myForm.X.ExecuteJs(t); * * } */ }
void IRequestHandler.OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { try { var pageFilter = FilterManager.GetFileter(request.Identifier.ToString()); if (pageFilter != null) { pageFilter.SetHeader(request.Headers, response.ResponseHeaders); pageFilter.SendNotify(); } } catch { } }
protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { var url = new Uri(request.Url); Debug.WriteLine("Debug OnResourceLoadComplete({0})", url); //if (url.Scheme == CefSharpSchemeHandlerFactory.SchemeName && memoryStream != null) if (memoryStream != null) { //TODO: Do something with the data here var data = memoryStream.ToArray(); var dataLength = data.Length; //NOTE: You may need to use a different encoding depending on the request var dataAsUtf8String = Encoding.UTF8.GetString(data); Debug.WriteLine("Debug OnResourceLoadComplete dataLength=({0})", dataLength); string cacheimage = "c:\\cefcache\\" + Path.GetFileName(url.ToString()); if (!File.Exists(cacheimage)) { StreamWriter writer = new StreamWriter(new FileStream(cacheimage, FileMode.OpenOrCreate)); writer.BaseStream.Write(data, 0, data.Length); } } /* * var filter = FilterManager.GetFileter(request.Identifier.ToString()) as TestImageFilter; * if (filter == null) * { * Debug.WriteLine("Debug OnResourceLoadComplete filter=null,reques={0}", request.Identifier.ToString()); * return; * } * byte[] data = filter.dataAll.ToArray(); * //filter_NotifyData(data); * string str = System.Text.Encoding.UTF8.GetString(data); * int getDataPageNum = 0; // page number of the currently obtained data * IList<IPostDataElement> elements = request.PostData.Elements; * foreach (IPostDataElement item in elements) * { * String postData = System.Text.Encoding.UTF8.GetString(item.Bytes); * Debug.WriteLine("Debug OnResourceLoadComplete dataLength=({0})", item.Bytes); * //postData is the post form data submitted by the page, you can do the query * } */ }
public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { throw new NotImplementedException(); }
private void RequestHandler_InterceptResourceLoadComplete(IWebBrowser arg1, IBrowser arg2, IFrame arg3, IRequest arg4, IResponse arg5, UrlRequestStatus arg6, long arg7) { var stream = ResourceCacheManager.GetResource(arg4.Identifier); if (stream != null) { stream.Seek(0, System.IO.SeekOrigin.Begin); } try { this.OnResourceLoadComplete?.Invoke(this, new ResourceLoadCompleteEventArgs(arg4.Url, arg4.ResourceType, arg7, stream, arg6)); } finally { ResourceCacheManager.DeleteResource(arg4.Identifier); } }
protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { string url = request.Url; string url_file = url.Split('?')[0]; var uri = new Uri(url); string type = response.MimeType; string file = Utility.build_path_file_save(uri); bool ok = false; if (File.Exists(file)) { ok = true; } else { byte[] buf = null; if (memoryStream != null) { buf = memoryStream.ToArray(); } switch (type) { case "text/html": if (file.EndsWith(".html") == false) { file += ".html"; } //Console.WriteLine("OK: " + type + " -> " + url_file + " => " + file); if (buf != null) { ok = true; File.WriteAllText(file, Encoding.UTF8.GetString(buf).Replace("index.html", "_index.html")); } break; case "text/css": if (file.EndsWith(".css") == false) { file += ".css"; } //Console.WriteLine("OK: " + type + " -> " + url_file + " => " + file); if (buf != null) { ok = true; File.WriteAllText(file, Encoding.UTF8.GetString(buf)); } break; case "text/javascript": case "application/javascript": if (file.EndsWith(".js") == false) { file += ".js"; } //Console.WriteLine("OK: " + type + " -> " + url_file + " => " + file); if (buf != null) { ok = true; File.WriteAllText(file, Encoding.UTF8.GetString(buf)); } break; case "image/jpeg": if (file.EndsWith(".jpg") == false) { file += ".jpg"; } //Console.WriteLine("OK: " + type + " -> " + url_file + " => " + file); if (buf != null) { ok = true; File.WriteAllBytes(file, buf); } break; case "image/jpg": if (file.EndsWith(".jpg") == false) { file += ".jpg"; } //Console.WriteLine("OK: " + type + " -> " + url_file + " => " + file); if (buf != null) { ok = true; File.WriteAllBytes(file, buf); } break; case "image/gif": if (file.EndsWith(".gif") == false) { file += ".gif"; } //Console.WriteLine("OK: " + type + " -> " + url_file + " => " + file); if (buf != null) { ok = true; File.WriteAllBytes(file, buf); } break; case "image/png": if (file.EndsWith(".png") == false) { file += ".png"; } //Console.WriteLine("OK: " + type + " -> " + url_file + " => " + file); if (buf != null) { ok = true; File.WriteAllBytes(file, buf); } break; case "image/svg+xml": if (file.EndsWith(".svg") == false) { file += ".svg"; } //Console.WriteLine("OK: " + type + " -> " + url_file + " => " + file); if (buf != null) { ok = true; File.WriteAllBytes(file, buf); } break; case "font/woff2": if (file.EndsWith(".woff2") == false) { file += ".woff2"; } //Console.WriteLine("OK: " + type + " -> " + url_file + " => " + file); if (buf != null) { ok = true; File.WriteAllBytes(file, buf); } break; default: //Console.WriteLine("NO: " + type + " -> " + url); // The number of bytes read try { new WebClient().DownloadFile(url, file); ok = true; } catch { } break; } } if (ok) { m_site.LOG_OK.Append(type + " -> " + url + ": " + Path.GetFileName(url_file) + " | " + file + Environment.NewLine); } else { m_site.LOG_ERROR.Append(type + " -> " + url + ": " + Path.GetFileName(url_file) + " | " + file + Environment.NewLine); } }
/// <summary> /// 【setup2】提取cookie /// </summary> /// <param name="browserControl"></param> /// <param name="browser"></param> /// <param name="frame"></param> /// <param name="request"></param> /// <param name="response"></param> /// <param name="status"></param> /// <param name="receivedContentLength"></param> public override void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (response.StatusCode != 200) { return; } var url = new Uri(request.Url); var extension = url.ToString().ToLower(); if (SystemSetting.SystemSettingDict["OpenDebug"] == "true") {//开启debug模式 extension.WriteLog(ELogType.Account, true); //输入写入到请求日志 IPostData data = request.PostData; if (data != null) { //请求内容被转换为了文件流 //输出有请求参数的URL StringBuilder requestHead = new StringBuilder(); requestHead.AppendLine(string.Format("url hava request param-> {0} ", extension)); foreach (var item in request.Headers.AllKeys) { requestHead.Append(string.Format("{0} : {1};", item, request.Headers[item])); } requestHead.ToString().WriteLog(ELogType.HttpRequest, true); } } //if (!extension.Contains(SystemConfig.CookieDomain)) //{ // return; //} if ((!SystemConfig.AnywhereGetCookie && extension != SystemConfig.InitCookeKey)) { return; } //这是请求响应头 ICookieManager cookie = Cef.GetGlobalCookieManager(); if (SystemConfig.AnywhereGetCookie) {//无限制提取cookie cookie.VisitAllCookies(new CookieVisitor()); } else { foreach (var urlFrom in SystemConfig.CookieFrom) { cookie.VisitUrlCookies(urlFrom, false, new CookieVisitor()); } } if (extension == SystemConfig.TockenAfterUrl) {//是否已经获取到了tocken ExistsTocken = true; } if (CookieHandle.GetCoreCookie(CookieVisitor.CookieDict)) { //从其他应用中获取到了cookie ExistsTocken = true; } if (ExistsTocken) {//提取到了完整的cookie StringBuilder cook = new StringBuilder(); cook.AppendLine(CookieVisitor.OutputCookie(CookieVisitor.CookieDict).ToString()); cook.ToString().WriteLog(ELogType.SessionOrCookieLog, true); //CookieContainer GetCookieResponse(CookieVisitor.CookieDict); } if (_requestHeandler != null) { _requestHeandler.OnResourceLoadComplete(browserControl, browser, frame, request, response, status, receivedContentLength); } if (SystemConfig.DownloadResource) { DownloadService.DownloadResource(extension, responseDictionary, request, response); } return; }
public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (request.Url.Contains("future/refreshFutureFulLPub.do")) { var filter = FilterManager.GetFileter(request.Identifier.ToString()) as FuturesResponseFilter; string str = System.Text.Encoding.Default.GetString(filter.dataAll.ToArray()); filter_NotifyOrderData(str); //filter.NotifyData(filter.dataAll.ToArray()); } }
// // Summary: // Called on the CEF IO thread when a resource load has completed. This method will // be called for all requests, including requests that are aborted due to CEF shutdown // or destruction of the associated browser. In cases where the associated browser // is destroyed this callback may arrive after the CefSharp.ILifeSpanHandler.OnBeforeClose(CefSharp.IWebBrowser,CefSharp.IBrowser) // callback for that browser. The CefSharp.IFrame.IsValid method can be used to // test for this situation, and care should be taken not to call browser or frame // methods that modify state (like LoadURL, SendProcessMessage, etc.) if the frame // is invalid. // // Parameters: // chromiumWebBrowser: // The ChromiumWebBrowser control // // browser: // the browser object - may be null if originating from ServiceWorker or CefURLRequest // // frame: // the frame object - may be null if originating from ServiceWorker or CefURLRequest // // request: // the request object - cannot be modified in this callback // // response: // the response object - cannot be modified in this callback // // status: // indicates the load completion status // // receivedContentLength: // is the number of response bytes actually read. public void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { int code = response.StatusCode; // exit if frame is invalid (if the frame has closed, for example) if (!frame.IsValid) { return; } // if NOT FOUND if (code == 404) { if (!request.Url.IsURLLocalhost()) { // redirect to web archive to try and find older version frame.LoadUrl("http://web.archive.org/web/*/" + request.Url); } else { // show offline "file not found" page frame.LoadUrl(MainForm.FileNotFoundURL + "?path=" + request.Url.EncodeURL()); } } // if FILE NOT FOUND else if (request.Url.IsURLOfflineFile()) { string path = request.Url.FileURLToPath(); if (path.FileNotExists()) { // show offline "file not found" page frame.LoadUrl(MainForm.FileNotFoundURL + "?path=" + path.EncodeURL()); } } else { // if CANNOT CONNECT if (code == 444 || (code >= 500 && code <= 599)) { // show offline "cannot connect to server" page frame.LoadUrl(MainForm.CannotConnectURL); } } }
public ResourceLoadCompleteEventArgs(string uri, ResourceType resourceType, long contentLength, Stream content, UrlRequestStatus status) { this.Uri = uri; this.ResourceType = resourceType; this.ContentLength = contentLength; this.Content = content; this.Status = status; }
public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (!RuntimeSettings.EnableWebDownloadMode) { return; } if (oldAddress != browserControl.Address || oldAddress == "") { oldAddress = browserControl.Address; Resources.Clear(); ResponseHeaders.Clear(); RequestHeaders.Clear(); } var dict = response.ResponseHeaders.AllKeys.ToDictionary(x => x, x => response.ResponseHeaders[x]); ResponseHeaders.Add(new HeaderWrapper(request.Identifier, dict)); var reqDict = request.Headers.AllKeys.ToDictionary(x => x, x => request.Headers[x]); RequestHeaders.Add(new HeaderWrapper(request.Identifier, reqDict)); MemoryStreamResponseFilter filter; if (responseDictionary.TryGetValue(request.Identifier, out filter)) { var data = filter.Data; Resources.Add(new RequestWrapper(request.Url, request.ResourceType, response.MimeType, data, request.Identifier)); } }
public void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (Config.FilterUrls.Contains(request.Url)) { var filter = FilterManager.GetFileter(request.Identifier.ToString()) as TestFilter; string data = Encoding.UTF8.GetString(filter.dataAll.ToArray()); if (data.Contains("token")) { LoginModel loginModel = JsonConvert.DeserializeObject <LoginModel>(data); Config.SetToken(loginModel.redirect_url); } LogService.Info($"{data}"); } }
protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { var url = new Uri(request.Url); if (url.Scheme == CefSharpSchemeHandlerFactory.SchemeName && memoryStream != null) { //TODO: Do something with the data here var data = memoryStream.ToArray(); var dataLength = data.Length; //NOTE: You may need to use a different encoding depending on the request var dataAsUtf8String = Encoding.UTF8.GetString(data); } }
public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { // If I have done all of my steps I can stop if (Steps.Count == 0) { return; } // Exicute the first step in my list if (browserControl.CanExecuteJavascriptInMainFrame) { try { browserControl.ExecuteScriptAsync(Steps.First()); } catch { } } // Remove the first step //Steps.RemoveAt(0); }
public void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { //if(_Reference != null && request.ResourceType== ResourceType.Favicon) //{ // if(SourcesList.TryGetValue(request.Url,out NetSource data)) // { // try // { // var b = new BitmapImage(); // b.BeginInit(); // b.CacheOption = BitmapCacheOption.OnLoad; // b.StreamSource = data.Data; // b.EndInit(); // b.Freeze(); // _Reference.Icon = b; // //ChrominViewModel target = null; // //if (refrence != null) refrence.TryGetTarget(out target); // //if (target != null) target.Icon = b; // } // catch (Exception er) // { // Console.WriteLine(" 创建faveicon 失败 : " + er.Message); // } // } // else // { // Console.WriteLine(" 创建faveicon 失败 : 没有找到favicon资源"); // } //} //if (request.Url.LastIndexOf(".jpg") > 0) Console.WriteLine("载入完毕----->{0}", request.Url); return; }
public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (request.Url.Contains("https://res.wx.qq.com/zh_CN/htmledition/v2/css/base/base2e4e03.css")) { var filter = FilterManager.GetFileter(request.Identifier.ToString()) as TestImageFilter; filter_NotifyData(filter.dataAll.ToArray()); } }
public OnResourceLoadCompleteEventArgs(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) : base(browserControl, browser) { Frame = frame; Request = request; Response = response; RequestStatus = status; RecivedContentLength = receivedContentLength; }
int haveImage = 99; // 99 macdinh; 0 la ko co anh; 1 la co anh // get html face public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { if (request.Method == "POST" && request.Url.Contains("facebook.com/webgraphql")) { content = classGetDataFromFB.get_content(request); haveImage = classGetDataFromFB.HaveImage(request); } if (request.Method == "POST" && request.Url.Contains("upload.facebook.com/ajax/react_composer/attachments")) { path_image = classGetDataFromFB.get_path_image(request); } if (content != "" && haveImage != 99) { class_Post2Xenz.post_xenzu(content, path_image, Properties.Settings.Default.UserXen, Properties.Settings.Default.PassXen); content = ""; path_image = ""; haveImage = 99; } // https://stackoverflow.com/questions/42536262/how-to-use-image-from-embedded-resource-with-cefsharp }
public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { // You can also check the request URL here }
public void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { }
public override void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { var url = new Uri(request.Url); if (url.Scheme == CefSharpSchemeHandlerFactory.SchemeName) { MemoryStreamResponseFilter filter; if (responseDictionary.TryGetValue(request.Identifier, out filter)) { //TODO: Do something with the data here var data = filter.Data; var dataLength = filter.Data.Length; //NOTE: You may need to use a different encoding depending on the request var dataAsUtf8String = Encoding.UTF8.GetString(data); } } }
protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { logic.OnResourceLoadComplete(request); }
void IRequestHandler.OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { }
protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { MemoryStreamResponseFilter filter; // get filter back from dictionary if (responseDictionary.TryGetValue(request.Identifier, out filter)) { // PROBLEM: FILTER.DISPOSE HAS ALREADY BEEN CALLED AND DATA CANT BE RETRIEVED Console.WriteLine($"RequestID {request.Identifier} {this.GetType().Name}->{MethodBase.GetCurrentMethod().Name}: IFilter.isDisposed: {filter.isDisposed}"); } }
public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { }
protected override void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { try { Uri.TryCreate(request.Url, UriKind.Absolute, out var url); var extension = url?.ToString()?.ToLower(); Debug.WriteLine($@"URL加载完成:{request.Url}"); Debug.WriteLine($@"URL加载完成#2:{request.Headers}"); MemoryStreamResponseFilter filter; if (responseDictionary.TryGetValue(request.Identifier, out filter)) { Debug.WriteLine("------------------------------------------------------------------------"); Debug.WriteLine(extension); string postData = ""; if (request.PostData?.Elements?.Count > 0) { foreach (var item in request.PostData.Elements) { Debug.WriteLine(Encoding.UTF8.GetString(item.Bytes)); postData += Encoding.UTF8.GetString(item.Bytes); } } Debug.WriteLine("responseDictionary.Count:" + responseDictionary.Count); var data = filter.Data; var dataLength = filter.Data.Length; var dataAsUtf8String = Encoding.UTF8.GetString(data); Debug.WriteLine(dataAsUtf8String); //数据到达 HttpPacketHookManager.PacketRoute(url.PathAndQuery.Replace("/", "_"), dataAsUtf8String, postData, "", ""); } } catch (System.Exception ex) { } finally { if (responseDictionary.ContainsKey(request.Identifier)) { responseDictionary.Remove(request.Identifier); // 释放 Debug.WriteLine($"数据包缓存量:{responseDictionary.Count}"); } base.OnResourceLoadComplete(browserControl, browser, frame, request, response, status, receivedContentLength); } }