微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# CookieContainer 忽略 cookie

如何解决C# CookieContainer 忽略 cookie

我尝试自动登录一个 PHP 生成站点,该站点使用普通表单和 cookie 来对用户进行身份验证。

对于连接,我使用以下代码

SocketsHttpHandler socketHandler = new SocketsHttpHandler();
Uri baseUri = new Uri("mySite");
socketHandler.CookieContainer = new CookieContainer();
socketHandler.UseCookies = true;
socketHandler.AllowAutoRedirect = true;

//httpclienthandler handler = new httpclienthandler();
//handler.CookieContainer = new CookieContainer();

httpClient = new HttpClient(socketHandler);
httpClient.BaseAddress = baseUri;

try{
  (call login.PHP with PostAsync to login on the side)
  ...
  HttpResponseMessage response = await httpClient.GetAsync("main.PHP").ConfigureAwait(false);
  response.EnsureSuccessstatusCode();

  string responseText = await response.Content.ReadAsstringAsync();

  <Here I miss a cookie>

  ...
} catch(HttpRequestException e)
{
  Console.WriteLine(e.Message);
}

代码已发布到登录站点,CookieContainter 现在存储 cookie:

sid=3m8heu881bmh38g2dahn2lj8ka
token=c3f0f448e90da26d33eaec84f4c334cbf5dedd03f03a758d48f494cc9525a740e452d2d868e42f9398af53da4ed73e7f

在 main.PHP 的 GetAsync 之后,我得到了大量的新 cookie(VS Debugger 视图):

[0] "sid=qe1g1csvjc6h7075mlauv3pupf; path=/; HttpOnly"  string
[1] "sid=qe1g1csvjc6h7075mlauv3pupf; HttpOnly; Secure; SameSite=None"   string
[2] "sct_auth-hr_5a211a5ad7cd6ef0e05f18cef75d7c98=b3bcd0357d050f70be5d91e25d87d99f; HttpOnly; Secure; SameSite=None"    string
[3] "login_instance=hr; path=/; HttpOnly; Secure; SameSite=None"    string
[4] "foxy_items=%5B%5D; path=/; Secure; SameSite=None"  string
[5] "foxy_items=%5B%5D; path=/; Secure; SameSite=None"  string

有谁知道为什么添加了不在 CookieContainer 中的 cookie 3 (sct_auth-hr_5a211a5ad7cd6ef0e05f18cef75d7c98)?其他 cookie 已正确添加

我使用的解决方法是:

response.Headers.TryGetValues("Set-Cookie",out var setCookie);

找到Cookie并手动添加。它有效,没有例外或其他可能阻止添加的事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。