币秋缠论培训 發表於 2023-4-28 09:27:00

delphi 操作 TEdgeBrowser 获取与设置 Cookie

<p>delphi 11.2 完整源码下载</p>
<p>详情请查看源码,现提供部分代码供大家查看</p>
<p>DELPHI智慧战神-技术群&nbsp;&nbsp;603146133&nbsp; 原来的群已被查封,请大家加新群</p>
<div class="cnblogs_code"><img id="code_img_closed_81f5bde9-c994-4018-84a4-34b301a850ac" class="code_img_closed lazyload" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_81f5bde9-c994-4018-84a4-34b301a850ac" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_81f5bde9-c994-4018-84a4-34b301a850ac" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">unit</span><span style="color: rgba(0, 0, 0, 1)"> uYouYouMgt;

</span><span style="color: rgba(0, 0, 255, 1)">interface</span>

<span style="color: rgba(0, 0, 255, 1)">uses</span><span style="color: rgba(0, 0, 0, 1)">
uSimpleBase, uEdgeCls, uIdhttpEx, System.SysUtils, System.StrUtils, uWebView2Horse, WebView2_TLb, uWebView2common,
Winapi.ActiveX, Comobj, System.Variants;

</span><span style="color: rgba(0, 0, 255, 1)">type</span><span style="color: rgba(0, 0, 0, 1)">

TYouYouMgt </span>= <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">(TSimpleBase)
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)">
    FCmd: integer;
    FIdhttp: TIdhttpEx;
    FSessionId: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    FWebView2Horse: TWebview2Horse;

    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span> OnExecScriptProcTing(AResult: HRESULT; AResultObjectAsJson: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> OnCreateDoc();

    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> OnWebResourceResponseReceivedTing(Sender: ICoreWebView2; Args: ICoreWebView2WebResourceResponseReceivedEventArgs);

    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> OnGetCookiesTing(Sender: TWebview2Horse);

</span><span style="color: rgba(0, 0, 255, 1)">public</span>
    <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Init;
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> GetVeriyCode;
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Login;
</span><span style="color: rgba(0, 0, 255, 1)">public</span>
    <span style="color: rgba(0, 0, 255, 1)">constructor</span> <span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">destructor</span> <span style="color: rgba(0, 0, 255, 1)">Destroy</span>; <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">
    BoEdgeBrowser: uEdgeCls.TEdgeBrowser;
    MoblieNum: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    MainUrl: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    CodeStr: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">implementation</span>

<span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> TYouYouMgt </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 0, 255, 1)">uses</span><span style="color: rgba(0, 0, 0, 1)">
uOperateIndy, SuperObject, uStrUtils;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TYouYouMgt.OnCreateDoc;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> FWebView2Horse.UpdateCookies(BoEdgeBrowser.DefaultInterface); 此句为设置到网页中去</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 增加 拦截网址打开后的功能,让 OnWebResourceResponseReceivedTing 生效</span>
FWebView2Horse.AddFilter(BoEdgeBrowser.DefaultInterface, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">*</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span> TYouYouMgt.OnExecScriptProcTing(AResult: HRESULT; AResultObjectAsJson: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TYouYouMgt.OnGetCookiesTing(Sender: TWebview2Horse);
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处已获取到 cookie , 在FWebView2Horse.CookieList 中</span>
DoOnMsg(FWebView2Horse.CookieList.ToDetail); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 显示cookie</span>

<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TYouYouMgt.OnWebResourceResponseReceivedTing(Sender: ICoreWebView2; Args: ICoreWebView2WebResourceResponseReceivedEventArgs);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
LResponse: ICoreWebView2WebResourceResponseView;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> LResponseHeaders: ICoreWebView2HttpResponseHeaders;</span>
<span style="color: rgba(0, 0, 0, 1)">LRequest: ICoreWebView2WebResourceRequest;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> LRequestHeaders: ICoreWebView2HttpRequestHeaders;</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> LIt: ICoreWebView2HttpHeadersCollectionIterator;</span>
<span style="color: rgba(0, 0, 0, 1)">pUri: PWideChar;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> pMethod: PWideChar;</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> pName, pValue: PWideChar;</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> LHasNext: integer;</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> pContentEncoding: PWideChar;</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> sContentEncoding: string;</span>
sTmpUrl: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
sUri: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
sPayLoad: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
J, E: ISuperObject;

</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
Args.Get_Request(LRequest);
LRequest.Get_uri(pUri);
sUri :</span>= <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">(pUri);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> DispMsg(pUri);</span>
<span style="color: rgba(0, 0, 0, 1)">Args.Get_Response(LResponse);

   DispMsg(</span><span style="color: rgba(0, 0, 255, 1)">string</span>(pUri)); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 显示拦截到的 url;</span>
<span style="color: rgba(0, 0, 0, 1)">
sTmpUrl :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">http://xxx/</span><span style="color: rgba(128, 0, 0, 1)">'</span> ;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 弄一个合适的网址,只要打开此网址后有 cookie 就行了.</span>

<span style="color: rgba(0, 0, 255, 1)">if</span> PosEx(sTmpUrl, sUri) &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

    DispMsg(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">检测到已登录URL请求:</span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> sTmpUrl);

    FWebView2Horse.GetCookies(BoEdgeBrowser.DefaultInterface); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取 cookie;</span>

<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">constructor</span> TYouYouMgt.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">inherited</span><span style="color: rgba(0, 0, 0, 1)">;
FIdhttp :</span>= TIdhttpEx.<span style="color: rgba(0, 0, 255, 1)">Create</span>(<span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">);
FWebView2Horse :</span>= TWebview2Horse.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 当打开 url 后</span>
FWebView2Horse.OnWebResourceResponseReceived :=<span style="color: rgba(0, 0, 0, 1)"> self.OnWebResourceResponseReceivedTing;
FWebView2Horse.OnGetCookies :</span>=<span style="color: rgba(0, 0, 0, 1)"> self.OnGetCookiesTing;

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">destructor</span> TYouYouMgt.<span style="color: rgba(0, 0, 255, 1)">Destroy</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
FIdhttp.Free;
FWebView2Horse.Free;
</span><span style="color: rgba(0, 0, 255, 1)">inherited</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TYouYouMgt.GetVeriyCode;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
sUrl: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
sHtml: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
sPayLoad: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
J: ISuperObject;
sUid: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
G: TGUID;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

sUrl :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://api.youpin898.com/api/user/Auth/SendSignInSmsCode</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

FIdhttp.Request.UserAgent :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
FIdhttp.Request.Accept :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">application/json, text/plain, */*</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
FIdhttp.Request.AcceptEncoding :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gzip, deflate, br</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
FIdhttp.Request.AcceptLanguage :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">zh-CN,zh;q=0.9,de;q=0.8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
FIdhttp.Request.ContentType :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">application/json</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

J :</span>=<span style="color: rgba(0, 0, 0, 1)"> so();

CreateGUID(G);

sUid :</span>=<span style="color: rgba(0, 0, 0, 1)"> LowerCase(G.ToString);

sUid :</span>= ReplaceAll(sUid, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">);
sUid :</span>= ReplaceAll(sUid, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">}</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">);

DispMsg(sUid);

FSessionId :</span>=<span style="color: rgba(0, 0, 0, 1)"> sUid;

J.S[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Mobile</span><span style="color: rgba(128, 0, 0, 1)">'</span>] :=<span style="color: rgba(0, 0, 0, 1)"> MoblieNum;
J.S[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SessionId</span><span style="color: rgba(128, 0, 0, 1)">'</span>] :=<span style="color: rgba(0, 0, 0, 1)"> FSessionId;

sPayLoad :</span>=<span style="color: rgba(0, 0, 0, 1)"> J.AsString;
DispMsg(sPayLoad);

</span><span style="color: rgba(0, 0, 255, 1)">if</span> IdhttpPost(FIdhttp, sPayLoad, sUrl, sHtml) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> DispMsg(FIdhttp.CookieMgr.CurCookies);</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

DispMsg(sHtml);

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TYouYouMgt.Init;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(BoEdgeBrowser) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    BoEdgeBrowser.OnEdgeMsg :</span>=<span style="color: rgba(0, 0, 0, 1)"> self.OnDispMsgTing;
    BoEdgeBrowser.AppendCreateViewCompletedWorkProc(OnCreateDoc);
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TYouYouMgt.Login;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
sUrl: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
sHtml: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
sPayLoad: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
J, jData: ISuperObject;
w: TWkCookie;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

sUrl :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://api.youpin898.com/api/user/Auth/SmsSignIn</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

FIdhttp.Request.UserAgent :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
FIdhttp.Request.Accept :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">application/json, text/plain, */*</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
FIdhttp.Request.AcceptEncoding :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gzip, deflate, br</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
FIdhttp.Request.AcceptLanguage :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">zh-CN,zh;q=0.9,de;q=0.8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
FIdhttp.Request.ContentType :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">application/json</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

J :</span>=<span style="color: rgba(0, 0, 0, 1)"> so();

J.S[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Mobile</span><span style="color: rgba(128, 0, 0, 1)">'</span>] :=<span style="color: rgba(0, 0, 0, 1)"> MoblieNum;
J.S[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SessionId</span><span style="color: rgba(128, 0, 0, 1)">'</span>] :=<span style="color: rgba(0, 0, 0, 1)"> FSessionId;
J.S[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Code</span><span style="color: rgba(128, 0, 0, 1)">'</span>] :=<span style="color: rgba(0, 0, 0, 1)"> CodeStr;

sPayLoad :</span>=<span style="color: rgba(0, 0, 0, 1)"> J.AsString;
DispMsg(sPayLoad);

</span><span style="color: rgba(0, 0, 255, 1)">if</span> IdhttpPost(FIdhttp, sPayLoad, sUrl, sHtml) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> DispMsg(FIdhttp.CookieMgr.CurCookies);</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

DispMsg(sHtml);

</span><span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> sHtml := LoadTextFromFile('登录成功.txt');
    J := so(sHtml);
    DispMsg(J.AsString); </span><span style="color: rgba(0, 128, 0, 1)">}</span><span style="color: rgba(0, 0, 0, 1)">

J :</span>=<span style="color: rgba(0, 0, 0, 1)"> so(sHtml);

jData :</span>= J.O[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Data</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">];

FWebView2Horse.CookieList.ClearAndFreeAllItems;

w :</span>=<span style="color: rgba(0, 0, 0, 1)"> FWebView2Horse.CookieList.AddNewOne;

w.CookieName :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">token</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
w.Value :</span>= jData.S[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Token</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">];
w.Domain :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">.youpin898.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

DispMsg(w.ToStr);

BoEdgeBrowser.Navigate(MainUrl);

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">end</span>.</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<div class="cnblogs_code"><img id="code_img_closed_cdefdeb1-6a55-4815-b723-ce3bf7fda3bf" class="code_img_closed lazyload" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_cdefdeb1-6a55-4815-b723-ce3bf7fda3bf" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_cdefdeb1-6a55-4815-b723-ce3bf7fda3bf" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">unit</span><span style="color: rgba(0, 0, 0, 1)"> uWebView2Horse;

</span><span style="color: rgba(0, 0, 255, 1)">interface</span>

<span style="color: rgba(0, 0, 255, 1)">uses</span><span style="color: rgba(0, 0, 0, 1)">

System.SysUtils, uSimpleBase, Windows, System.Classes, Winapi.ActiveX, Comobj, WebView2_TLb, uWebView2Common,
System.Variants;

</span><span style="color: rgba(0, 0, 255, 1)">type</span><span style="color: rgba(0, 0, 0, 1)">

TWebview2Horse </span>= <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">;

TOnWebResourceResponseReceived </span>= <span style="color: rgba(0, 0, 255, 1)">procedure</span>(Sender: ICoreWebView2; Args: ICoreWebView2WebResourceResponseReceivedEventArgs) <span style="color: rgba(0, 0, 255, 1)">of</span> <span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)">;
TOnNewWindowRequest </span>= <span style="color: rgba(0, 0, 255, 1)">procedure</span>(ANewWebView2: ICoreWebView2; Args: ICoreWebView2NewWindowRequestedEventArgs) <span style="color: rgba(0, 0, 255, 1)">of</span> <span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)">;

TOnGetCookies </span>= <span style="color: rgba(0, 0, 255, 1)">procedure</span>(Sender: TWebview2Horse) <span style="color: rgba(0, 0, 255, 1)">of</span> <span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)">;

TWebview2Horse </span>= <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">(TSimpleBase)
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)">
    FWebResourceResponseReceivedToken: EventRegistrationToken;
    FNewWindowToken: EventRegistrationToken;
</span><span style="color: rgba(0, 0, 255, 1)">public</span>

    <span style="color: rgba(0, 0, 255, 1)">constructor</span> <span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">destructor</span> <span style="color: rgba(0, 0, 255, 1)">Destroy</span>; <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)">;

    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span> UpdateCookies(AWebView2: IInterface); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将 cookies 写入浏览器</span>
    <span style="color: rgba(0, 0, 255, 1)">procedure</span> GetCookies(AWebView2: IInterface); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取 cookies 写入 CookieList;</span>
    <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TestHost(AWebView2: IInterface);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span> AddFilter(AWebView2: IInterface; AFilter: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> AddNewWindowRequested(AWebView2: IInterface);

    </span><span style="color: rgba(0, 0, 255, 1)">function</span> GetPayLoad(ARequest: ICoreWebView2WebResourceRequest): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">
    CookieList: TWkCookieList;
    OnWebResourceResponseReceived: TOnWebResourceResponseReceived;
    OnNewWindowRequest: TOnNewWindowRequest;
    OnGetCookies: TOnGetCookies;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

TCoreWebView2WebResourceResponseViewGetContentCompletedHandler </span>= <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">;

TOnGetContent </span>= <span style="color: rgba(0, 0, 255, 1)">procedure</span>(Sender: TObject; ContentStream: TMemoryStream) <span style="color: rgba(0, 0, 255, 1)">of</span> <span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)">;

TCoreWebView2WebResourceResponseViewGetContentCompletedHandler </span>= <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">(TInterfacedObject, ICoreWebView2WebResourceResponseViewGetContentCompletedHandler)
</span><span style="color: rgba(0, 0, 255, 1)">public</span>
    <span style="color: rgba(0, 0, 255, 1)">constructor</span> <span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">destructor</span> <span style="color: rgba(0, 0, 255, 1)">Destroy</span>; <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">function</span> Invoke(errorCode: HResult; <span style="color: rgba(0, 0, 255, 1)">const</span> Content: IStream): HResult; <span style="color: rgba(0, 0, 255, 1)">stdcall</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">
    ContentStream: TMemoryStream;
    OnGetContent: TOnGetContent;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">implementation</span>

<span style="color: rgba(0, 0, 255, 1)">uses</span><span style="color: rgba(0, 0, 0, 1)">
uStrUtils;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span> TWebview2Horse.AddFilter(AWebView2: IInterface; AFilter: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span>: ICoreWebView2_<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> DispMsg('增加 web recevied');</span>

<span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(AWebView2) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

    LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span> := AWebView2 <span style="color: rgba(0, 0, 255, 1)">as</span> ICoreWebView2_<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;

    LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span>.AddWebResourceRequestedFilter(pchar(AFilter), <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
    LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span>.add_WebResourceResponseReceived(CallBack&lt;ICoreWebView2, ICoreWebView2WebResourceResponseReceivedEventArgs&gt;<span style="color: rgba(0, 0, 0, 1)">.

      CreateAs</span>&lt;ICoreWebView2WebResourceResponseReceivedEventHandler&gt;<span style="color: rgba(0, 0, 0, 1)">(

      </span><span style="color: rgba(0, 0, 255, 1)">function</span>(<span style="color: rgba(0, 0, 255, 1)">const</span> Sender: ICoreWebView2; <span style="color: rgba(0, 0, 255, 1)">const</span> Args: ICoreWebView2WebResourceResponseReceivedEventArgs): HResult <span style="color: rgba(0, 0, 255, 1)">stdcall</span>
      <span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
      result :</span>=<span style="color: rgba(0, 0, 0, 1)"> S_OK;
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(OnWebResourceResponseReceived) <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)">
          OnWebResourceResponseReceived(Sender, Args);
      </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">

      ), FWebResourceResponseReceivedToken);

</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    DoOnMsg(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">AWebView2 为 nil</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TWebview2Horse.AddNewWindowRequested(AWebView2: IInterface);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span>: ICoreWebView2_<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> DispMsg('增加 NewWindowEvent');</span>

<span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(AWebView2) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

    LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span> := AWebView2 <span style="color: rgba(0, 0, 255, 1)">as</span> ICoreWebView2_<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
    LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span>.add_NewWindowRequested(CallBack&lt;ICoreWebView2, ICoreWebView2NewWindowRequestedEventArgs&gt;.CreateAs&lt;ICoreWebView2NewWindowRequestedEventHandler&gt;<span style="color: rgba(0, 0, 0, 1)">(

      </span><span style="color: rgba(0, 0, 255, 1)">function</span>(<span style="color: rgba(0, 0, 255, 1)">const</span> Sender: ICoreWebView2; <span style="color: rgba(0, 0, 255, 1)">const</span> Args: ICoreWebView2NewWindowRequestedEventArgs): HResult <span style="color: rgba(0, 0, 255, 1)">stdcall</span>
      <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> var
      LWV2: ICoreWebView2;
      pUrl: pchar;
      r: HResult;

      LWindowFeature: ICoreWebView2WindowFeatures; </span><span style="color: rgba(0, 128, 0, 1)">}</span>
      <span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

      result :</span>=<span style="color: rgba(0, 0, 0, 1)"> S_OK;

      </span><span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> r := Args.Get_NewWindow(LWV2);

          DispMsg(InttoStr(r));

          r := Args.Get_uri(pUrl);
          DispMsg(InttoStr(r));

          Sender.Get_Source(pUrl);

          DispMsg('pUrl:'+string(purl)); </span><span style="color: rgba(0, 128, 0, 1)">}</span>

      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> args.Set_NewWindow();</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> args.Get_WindowFeatures(LWindowFeature);</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> args.</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> args.Get_NewWindow(LWV2);</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> sender.Navigate(purl);</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> sender.</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> args.Get_Handled()</span>

      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Args.Set_Handled(1);</span>
      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Args.Set_NewWindow(Sender);</span>

      <span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(OnNewWindowRequest) <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)">
          OnNewWindowRequest(Sender, Args);

      </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">

      ), FNewWindowToken);

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">constructor</span> TWebview2Horse.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">inherited</span><span style="color: rgba(0, 0, 0, 1)">;
CookieList :</span>= TWkCookieList.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">destructor</span> TWebview2Horse.<span style="color: rgba(0, 0, 255, 1)">Destroy</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
CookieList.Free;
</span><span style="color: rgba(0, 0, 255, 1)">inherited</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TWebview2Horse.GetCookies(AWebView2: IInterface);

</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">

LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span>: ICoreWebView2_<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
LCookieMgt: ICoreWebView2CookieManager;

</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

CookieList.ClearAndFreeAllItems;

LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span> := AWebView2 <span style="color: rgba(0, 0, 255, 1)">as</span> ICoreWebView2_<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">.Get_CookieManager(LCookieMgt);

</span><span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(LCookieMgt) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

    LCookieMgt.GetCookies(</span><span style="color: rgba(0, 0, 255, 1)">nil</span>, CallBack&lt;HResult, ICoreWebView2CookieList&gt;.CreateAs&lt;ICoreWebView2GetCookiesCompletedHandler&gt;<span style="color: rgba(0, 0, 0, 1)">(

      </span><span style="color: rgba(0, 0, 255, 1)">function</span>(AResult: HResult; <span style="color: rgba(0, 0, 255, 1)">const</span> CookieList: ICoreWebView2CookieList): HResult <span style="color: rgba(0, 0, 255, 1)">stdcall</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
      i: integer;
      nCookieCount: Cardinal;
      LCookie: ICoreWebView2Cookie;
      pName, pValue, pDoMain, pPath: PWidechar;
      LWkCookie: TWkCookie;

      </span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
      result :</span>=<span style="color: rgba(0, 0, 0, 1)"> S_OK;
      CookieList.Get_Count(nCookieCount);

      </span><span style="color: rgba(0, 0, 255, 1)">for</span> i := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> nCookieCount - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
      <span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
          CookieList.GetValueAtIndex(i, LCookie);

          </span><span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(LCookie) <span style="color: rgba(0, 0, 255, 1)">then</span>
          <span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

            LCookie.Get_name(pName);
            LCookie.Get_value(pValue);
            LCookie.Get_Domain(pDoMain);
            LCookie.Get_Path(pPath);

            LWkCookie :</span>=<span style="color: rgba(0, 0, 0, 1)"> self.CookieList.AddNewOne;
            LWkCookie.CookieName :</span>=<span style="color: rgba(0, 0, 0, 1)"> pName;
            LWkCookie.Value :</span>=<span style="color: rgba(0, 0, 0, 1)"> pValue;
            LWkCookie.Path :</span>=<span style="color: rgba(0, 0, 0, 1)"> pPath;
            LWkCookie.Domain :</span>=<span style="color: rgba(0, 0, 0, 1)"> pDoMain;

          </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

      </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> DispMsg(self.CookieList.ToDetail);</span>
      <span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(OnGetCookies) <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)">
          OnGetCookies(self);

      </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">

      ));

</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
    DoOnMsg(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">获取 ICoreWebView2CookieManager 失败</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">function</span> TWebview2Horse.GetPayLoad(ARequest: ICoreWebView2WebResourceRequest): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
k: IStream;
M: TMemoryStream;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
result :</span>= <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">;
k :</span>= <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
ARequest.Get_Content(k);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(k) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> result:</span>
    M := TMemoryStream.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
      IStreamToStream(k, M);
      result :</span>=<span style="color: rgba(0, 0, 0, 1)"> StreamToStringInUtf8(M);
    </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)">
      M.Free;
    </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TWebview2Horse.TestHost(AWebView2: IInterface);

</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
LWebView2: ICoreWebView2;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> LSettings: ICoreWebView2Settings;</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

LWebView2 :</span>= AWebView2 <span style="color: rgba(0, 0, 255, 1)">as</span><span style="color: rgba(0, 0, 0, 1)"> ICoreWebView2;

</span><span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(LWebView2) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TWebview2Horse.UpdateCookies(AWebView2: IInterface);

</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">

LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span>: ICoreWebView2_<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
LCookieMgt: ICoreWebView2CookieManager;

LCookie: ICoreWebView2Cookie;
LWkCookie: TWkCookie;

</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">

LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span> := AWebView2 <span style="color: rgba(0, 0, 255, 1)">as</span> ICoreWebView2_<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;

LWebView2_</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">.Get_CookieManager(LCookieMgt);

</span><span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(LCookieMgt) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span>

    <span style="color: rgba(0, 0, 255, 1)">for</span> LWkCookie <span style="color: rgba(0, 0, 255, 1)">in</span> CookieList <span style="color: rgba(0, 0, 255, 1)">do</span>
    <span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
      LCookieMgt.CreateCookie(PWidechar(LWkCookie.CookieName), PWidechar(LWkCookie.Value), PWidechar(LWkCookie.Domain), PWidechar(LWkCookie.Path), LCookie);

      </span><span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(LCookie) <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)">
      LCookieMgt.AddOrUpdateCookie(LCookie)
      </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
      DoOnMsg(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">生成 ICoreWebView2Cookie 失败</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

    CookieList.ClearAndFreeAllItems;

</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
    DoOnMsg(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">获取 ICoreWebView2CookieManager 失败</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> TCoreWebView2WebResourceResponseViewGetContentCompletedHandler </span><span style="color: rgba(0, 128, 0, 1)">}</span>

<span style="color: rgba(0, 0, 255, 1)">constructor</span> TCoreWebView2WebResourceResponseViewGetContentCompletedHandler.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">inherited</span><span style="color: rgba(0, 0, 0, 1)">;
ContentStream :</span>= TMemoryStream.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">destructor</span> TCoreWebView2WebResourceResponseViewGetContentCompletedHandler.<span style="color: rgba(0, 0, 255, 1)">Destroy</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
ContentStream.Free;
</span><span style="color: rgba(0, 0, 255, 1)">inherited</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">function</span> TCoreWebView2WebResourceResponseViewGetContentCompletedHandler.Invoke(errorCode: HResult; <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> Content: IStream): HResult;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
LStatStg: TStatStg;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
result :</span>=<span style="color: rgba(0, 0, 0, 1)"> S_OK;

ContentStream.Clear;

</span><span style="color: rgba(0, 0, 255, 1)">if</span> Content &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    Content.Stat(LStatStg, </span><span style="color: rgba(128, 0, 128, 1)">09</span><span style="color: rgba(0, 0, 0, 1)">);
    IStreamToStream(Content, ContentStream, LStatStg.cbSize);
    ContentStream.Position :</span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">if</span> Assigned(OnGetContent) <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)">
    OnGetContent(self, ContentStream);

</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">end</span>.</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/lackey/p/17360961.html
頁: [1]
查看完整版本: delphi 操作 TEdgeBrowser 获取与设置 Cookie