gpt4 book ai didi

cefsharp - 如何使用 CEFSharp 收集所有 cookie?

转载 作者:行者123 更新时间:2023-12-03 21:28:46 24 4
gpt4 key购买 nike

为了使用 WebClient 而不是 Chrome 进行下载,我截获了一个下载 URL。然后我在使用 获取 cookie 时遇到了问题。访客 .我陷入的陷阱是我不明白访问者是异步运行的,因此只有 30% 的情况下过早访问收集的 cookie 得到了正确的结果。

由于我搜索了很长时间的解决方案,我想将我在演示代码中找到的解决方案粘贴到此处。

最佳答案

这是我找到的代码。 等待 关键词是我遗漏的重要部分:

class CookieCollector : ICookieVisitor
{
private readonly TaskCompletionSource<List<Cookie>> _source = new TaskCompletionSource<List<Cookie>>();

public bool Visit(Cookie cookie, int count, int total, ref bool deleteCookie)
{
_cookies.Add(cookie);

if (count == (total - 1))
{
_source.SetResult(_cookies);
}

}

// https://github.com/amaitland/CefSharp.MinimalExample/blob/ce6e579ad77dc92be94c0129b4a101f85e2fd75b/CefSharp.MinimalExample.WinForms/ListCookieVisitor.cs
// CefSharp.MinimalExample.WinForms ListCookieVisitor

public Task<List<Cookie>> Task => _source.Task;

public static string GetCookieHeader(List<Cookie> cookies)
{

StringBuilder cookieString = new StringBuilder();
string delimiter = string.Empty;

foreach (var cookie in cookies)
{
cookieString.Append(delimiter);
cookieString.Append(cookie.Name);
cookieString.Append('=');
cookieString.Append(cookie.Value);
delimiter = "; ";
}

return cookieString.ToString();
}

private readonly List<Cookie> _cookies = new List<Cookie>();
public void Dispose()
{
}
}

// usage:
void foo()
{
var cookieManager = Cef.GetGlobalCookieManager();
var visitor = new CookieCollector();

cookieManager.VisitUrlCookies(targetUrl, true, visitor);

var cookies = await visitor.Task; // AWAIT !!!!!!!!!
var cookieHeader = CookieCollector.GetCookieHeader(cookies);
}

关于cefsharp - 如何使用 CEFSharp 收集所有 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41690273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com