gpt4 book ai didi

c# - 池化的 HttpClient 实例是否保留 CookieContainer?

转载 作者:行者123 更新时间:2023-12-03 21:44:50 26 4
gpt4 key购买 nike

answer显示如何将 cookie 添加到 HttpClient 请求。但其中一条评论警告说 CookieContainer缓存在 HttpClient 上。我的大部分 cookie 不应再次发送给其他用户。
我希望HttpClientFactory清理添加的东西 CookieContainer关闭其池中的 HttpClient 实例。
如果我得到我的 HttpClient调用 httpClientFactory.CreateClient我得到的有没有可能有以前的 CookieContainer在上面?
更新:
我的问题的答案是肯定的! CookieContainer用于当您想在每次调用时发送相同的 cookie 时。
如果您需要在每次调用时发送不同的 cookie,有几种方法可以做到这一点。但最简单的是把它放在标题中。
因为HttpClientFactory创建一个新的 HttpClient对于客户端的每个请求,您可以添加到客户端的 header 中,而不必担心它会重复使用 cookie。
这样做的关键是设置UseCookies .它必须设置为 false 否则您添加到标题中的 cookie 将被忽略。完成此操作后,您可以将 cookie 添加到“Cookies”键下的标题中,并以分号分隔的键值对(它们之间有等号)的形式输入它们。您的 cookie 会返回到标题“Set-Cookies”中。

最佳答案

这是HttpMessageHandler被合并的实例;不是 HttpClient实例。默认情况下,处理程序的生命周期为 2 分钟,这意味着 CookieContainer 很有可能将在多个 HttpClient 之间共享s。
有一个 section in the official docs ,它解释了自动 cookie 处理和 IHttpClientFactory不能很好地协同工作:

The pooled HttpMessageHandler instances results in CookieContainer objects being shared. Unanticipated CookieContainer object sharing often results in incorrect code. For apps that require cookies, consider either:

  • Disabling automatic cookie handling
  • Avoiding IHttpClientFactory

Call ConfigurePrimaryHttpMessageHandler to disable automatic cookie handling:

services.AddHttpClient("configured-disable-automatic-cookies")
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new SocketsHttpHandler()
{
UseCookies = false,
};
});

关于c# - 池化的 HttpClient 实例是否保留 CookieContainer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65227400/

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