问题描述
我尝试自动登录到一个 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 (将#修改为@)