c# - 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 调试器视图):
[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 并手动添加。它有效,没有例外或其他可能阻止添加的事情。
解决方案
推荐阅读
- c# - 如何创建通常使用泛型方法生成的类的实例?
- notepad++ - 在 Notepad++ 宏中复制和粘贴
- kubernetes - 同一 URL 的 Kubernetes 部署中的多个 imagePullSecrets
- c# - 向 http 端点发送 serilog 请求
- android - QT HID条码阅读器在textinput中的不同击键然后是Keys.onPressed
- vba - VBA内二维数组的索引匹配
- javascript - WebdriverIO-Jasmine Async 函数未在 10000ms 内完成
- android-studio - Android Studio 错误:tensorflow/lite/kernels/conv.cc:313 input->dims->size != 4 (2 != 4) 节点号 1 (CONV_2D) 准备失败
- c++ - SORTING C++,如何显示项目的名称?
- lektor - 从模板渲染页面对象