admin
2020-06-10 a610f2ab6e543d2cb78c1ef212ac6a74ddc067d9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using CefSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
 
namespace WindowsFormsApp1.utils.tb
{
    class TBLoginRequestHandler : IRequestHandler
    {
 
        private String mark;
        private IGetTBCookieListener tbCookieListener;
        public TBLoginRequestHandler(String mark, IGetTBCookieListener tbCookieListener)
        {
            this.mark = mark;
            this.tbCookieListener = tbCookieListener;
        }
        public class CookieVisitor : ICookieVisitor
        {
 
            private Dictionary<String, String> cookiesMap = new Dictionary<String, String>();
 
            private IGetTBCookieListener tbCookieListener;
 
            public CookieVisitor()
            {
 
            }
 
            public void setTBCookieListener(IGetTBCookieListener tbCookieListener)
            {
                this.tbCookieListener = tbCookieListener;
            }
 
            public void Dispose()
            {
 
            }
 
            public bool Visit(Cookie cookie, int count, int total, ref bool deleteCookie)
            {
                cookiesMap.Add(cookie.Name, cookie.Value);
                if (count + 1 >= total)
                    this.success();
                Console.WriteLine(count + ":" + total);
                return true;
            }
 
 
            //cookies获取成功
            private void success()
            {
                String cookies = "";
                StringBuilder sb = new StringBuilder("");
 
                foreach (KeyValuePair<string, string> kvp in cookiesMap)
                {
                    sb.Append(kvp.Key + "=" + kvp.Value + ";");
                }
                cookies = sb.ToString();
                if (cookies.EndsWith(";"))
                    cookies = cookies.Substring(0, cookies.Length - 1);
                Console.WriteLine(cookies);
                if (cookiesMap.ContainsKey("login"))
                    tbCookieListener.onSuccess(cookiesMap, cookies);
            }
        }
 
 
        public IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
        {
            if (request.Url.StartsWith(this.mark))
            {
                Console.WriteLine("cookie开始");
                CookieVisitor cookieVisitor = new CookieVisitor();
                cookieVisitor.setTBCookieListener(tbCookieListener);
                chromiumWebBrowser.GetCookieManager().VisitUrlCookies(request.Url, true, cookieVisitor);
                Console.WriteLine("cookie结束");
            }
            return null;
        }
 
        public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
        {
            return false;
        }
 
        public bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
        {
            return true;
        }
 
        public bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
        {
            return false;
        }
 
        public void OnPluginCrashed(IWebBrowser chromiumWebBrowser, IBrowser browser, string pluginPath)
        {
 
        }
 
        public bool OnQuotaRequest(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
        {
            return true;
        }
 
        public void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status)
        {
 
        }
 
        public void OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
 
        }
 
        public bool OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback)
        {
            return true;
        }
 
        bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
        {
 
 
 
            return true;
        }
 
        bool IRequestHandler.GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
        {
            return true;
        }
 
    }
 
 
    public interface IGetTBCookieListener
    {
        void onSuccess(Dictionary<String, String> cookiesMap, String cookies);
    }
}