Browse Source

添加小心拦截

章政 7 years ago
parent
commit
3e3fea0ad2

+ 3 - 2
UAS_Web/Browser.cs

@@ -22,12 +22,13 @@ namespace UAS_Web
         {
             InitializeComponent();
             Text = "思拓微-供应商条码打印";
-            string path = "http://stwecig.vicp.io:8099/ERP/jsps/vendbarcode/login.jsp";
+            string path = "http://192.168.253.6/uas_dev/jsps/vendbarcode/login.jsp";
             webBrowser = new ChromiumWebBrowser(path)
             {
                 Dock = DockStyle.Fill
             };
             webBrowser.MenuHandler = new MenuHandler();
+            webBrowser.RequestHandler = new RequestHandler();
             Controls.Add(webBrowser);
             webBrowser.LoadError += WebBrowser_LoadError;
         }
@@ -39,7 +40,7 @@ namespace UAS_Web
 
         private void Browser_FormClosing(object sender, FormClosingEventArgs e)
         {
-            webBrowser.Dispose();
+            webBrowser.GetBrowser().CloseBrowser(true);
             CefSharp.Cef.Shutdown();
         }
 

+ 3 - 0
UAS_Web/UAS_Web.csproj

@@ -100,7 +100,10 @@
     </Compile>
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="tool\FilterManager.cs" />
     <Compile Include="tool\MenuHandler.cs" />
+    <Compile Include="tool\MessageFilter.cs" />
+    <Compile Include="tool\RequestHandler.cs" />
     <EmbeddedResource Include="Browser.resx">
       <DependentUpon>Browser.cs</DependentUpon>
     </EmbeddedResource>

+ 31 - 0
UAS_Web/tool/FilterManager.cs

@@ -0,0 +1,31 @@
+using CefSharp;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UAS_Web.tool
+{
+    class FilterManager
+    {
+        public static Dictionary<string, IResponseFilter> dataList = new Dictionary<string, IResponseFilter>();
+
+        public static IResponseFilter CreateFilter(string guid)
+        {
+            lock (dataList)
+            {
+                var filter = new MessageFilter();
+                dataList.Add(guid, filter);
+                return filter;
+            }
+        }
+
+        public static IResponseFilter GetFileter(string guid)
+        {
+            lock (dataList)
+            {
+                return dataList[guid];
+            }
+        }
+    }
+}

+ 75 - 0
UAS_Web/tool/MessageFilter.cs

@@ -0,0 +1,75 @@
+using CefSharp;
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+namespace UAS_Web.tool
+{
+    class MessageFilter : IResponseFilter
+    {
+
+        public event Action<byte[]> NotifyData;
+        private int contentLength = 0;
+        public List<byte> dataAll = new List<byte>();
+
+        public void SetContentLength(int contentLength)
+        {
+            this.contentLength = contentLength;
+        }
+
+        public void Dispose()
+        {
+            
+        }
+
+        public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten)
+        {
+            try
+            {
+                if (dataIn == null)
+                {
+                    dataInRead = 0;
+                    dataOutWritten = 0;
+                    return FilterStatus.Done;
+                }
+
+                dataInRead = dataIn.Length;
+                dataOutWritten = Math.Min(dataInRead, dataOut.Length);
+
+                dataIn.CopyTo(dataOut);
+                dataIn.Seek(0, SeekOrigin.Begin);
+                byte[] bs = new byte[dataIn.Length];
+                dataIn.Read(bs, 0, bs.Length);
+                dataAll.AddRange(bs);
+
+                if (dataAll.Count == this.contentLength)
+                {
+                    // 通过这里进行通知  
+                    NotifyData(dataAll.ToArray());
+                    return FilterStatus.Done;
+                }
+                else if (dataAll.Count < this.contentLength)
+                {
+                    dataInRead = dataIn.Length;
+                    dataOutWritten = dataIn.Length;
+                    return FilterStatus.NeedMoreData;
+                }
+                else
+                {
+                    return FilterStatus.Error;
+                }
+            }
+            catch (Exception)
+            {
+                dataInRead = dataIn.Length;
+                dataOutWritten = dataIn.Length;
+                return FilterStatus.Done;
+            }
+        }
+
+        public bool InitFilter()
+        {
+            return true;
+        }
+    }
+}

+ 126 - 0
UAS_Web/tool/RequestHandler.cs

@@ -0,0 +1,126 @@
+using CefSharp;
+using System;
+
+namespace UAS_Web.tool
+{
+    class RequestHandler : IRequestHandler
+    {
+        public event Action<byte[]> NotifyMsg;
+
+        public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
+        {
+            var url = new Uri(request.Url);
+            if (url.AbsoluteUri.Contains("http://192.168.253.6/uas_dev/jsps/vendbarcode/login.jsp"))
+            {
+                var filter = FilterManager.CreateFilter(request.Identifier.ToString());
+                return filter;
+            }
+            return null;
+        }
+
+        void filter_NotifyData(byte[] data)
+        {
+            if (NotifyMsg != null)
+            {
+                NotifyMsg(data);
+            }
+        }
+
+        public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
+        {
+            if (request.Url.Contains("http://192.168.253.6/uas_dev/jsps/vendbarcode/login.jsp"))
+            {
+                var filter = FilterManager.GetFileter(request.Identifier.ToString()) as MessageFilter;
+                string str = System.Text.Encoding.ASCII.GetString(filter.dataAll.ToArray());
+                Console.WriteLine(str);
+                filter_NotifyData(filter.dataAll.ToArray());
+            }
+        }
+
+        public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
+        {
+            Console.WriteLine("GetAuthCredentials");
+            return false;
+        }
+
+        //public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
+        //{
+        //    Console.WriteLine("GetResourceResponseFilter");
+        //    return new MessageFilter();
+        //}
+
+        public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
+        {
+            Console.WriteLine("OnBeforeBrowse");
+            return false;
+        }
+
+        public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
+        {
+            Console.WriteLine("OnBeforeResourceLoad");
+            return CefReturnValue.Continue;
+        }
+
+        public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
+        {
+            Console.WriteLine("OnCertificateError");
+            return false;
+        }
+
+        public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
+        {
+            Console.WriteLine("OnOpenUrlFromTab");
+            return false;
+        }
+
+        public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
+        {
+            Console.WriteLine("OnPluginCrashed");
+            //throw new NotImplementedException();
+        }
+
+        public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
+        {
+            Console.WriteLine("OnProtocolExecution");
+            return false;
+        }
+
+        public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
+        {
+            Console.WriteLine("OnQuotaRequest");
+            return false;
+        }
+
+        public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
+        {
+            Console.WriteLine("OnRenderProcessTerminated");
+            //throw new NotImplementedException();
+        }
+
+        public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
+        {
+            Console.WriteLine("OnRenderViewReady");
+            //throw new NotImplementedException();
+        }
+
+        //public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
+        //{
+        //    Console.WriteLine("OnResourceLoadComplete");
+        //    Console.WriteLine(response.ResponseHeaders);
+        //}
+
+        public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl)
+        {
+            Console.WriteLine("OnResourceRedirect");
+            //throw new NotImplementedException();
+        }
+
+        public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
+        {
+            //Console.WriteLine(response.MimeType);
+            //Console.WriteLine(response.StatusText);
+            Console.WriteLine("OnResourceResponse");
+            return false;
+        }
+    }
+}