[英]Missing cookies during login using Flurl
當我嘗試登錄 web 服務時,不知何故缺少一些 cookies。 缺少 cookie 的三個部分,特別是令牌和刷新令牌。 但是,當我嘗試使用 Postman 登錄時,我得到了 cookie 的所有部分。 這很奇怪,下面你可以看到我使用 Flurl 登錄服務的代碼。
private async Task<IFlurlClient> GetClientAsync()
{
var client = new FlurlClient(BaseUrl).EnableCookies();
var login = await client.Request("/Account/LogOn")
.AllowAnyHttpStatus()
.PostUrlEncodedAsync(new { Login = credentials.Username, credentials.Password});
if (!login.IsSuccessStatusCode) throw new ResponseException("Login failed");
return client;
}
請參閱調試時看到的 cookies 的屏幕截圖。
接下來我們可以看看我使用Postman時可以看到哪個cookies。
我需要所有 7 個 cookies 用於后續調用服務。 關於我可能做錯了什么或可能缺少什么的任何想法?
使用 Postman 時,我所做的只是使用我擁有的憑據進行帶有表單數據的簡單 POST。 兩個調用 Postman 和 Flurl 都成功,狀態碼為 200 OK,不同的是收到的 cookie 值。
感謝 Todd,我通過更新到 Flurl 3.0 解決了我的問題並更新了我的代碼。 有關使用 CookieSession 的新版本和改進版本,請參見下文。
private async Task<CookieJar> GetCookiesAsync()
{
using var session = new CookieSession(Endpoint);
var data = new {credentials.Username, credentials.Password};
var login = await session.Request("/login").AllowAnyHttpStatus().PostUrlEncodedAsync(data);
return login.ResponseMessage.IsSuccessStatusCode ? session.Cookies : null;
}
...
var cookies = await GetCookiesAsync();
if (cookies == null) return false;
var test = await Endpoint.AppendPathSegment("/test")
.WithCookies(cookies)
.AllowAnyHttpStatus()
.PostAsync(null);
var success = test.ResponseMessage.IsSuccessStatusCode;
使用它,我可以通過在登錄任何后續調用時收到的 cookies 並且一切正常。
編輯:
再次更新代碼以使用 Todds 的建議,見下文。
private async Task<CookieSession> CreateSessionAsync()
{
using var session = new CookieSession(Endpoint);
var data = new {credentials.Username, credentials.Password};
var login = await session.Request("/login").AllowAnyHttpStatus().PostUrlEncodedAsync(data);
return login.ResponseMessage.IsSuccessStatusCode ? session : null;
}
var session = await CreateSessionAsync();
if (session == null) return false;
var test = await session.Request("/test")
.AllowAnyHttpStatus()
.PostJsonAsync(new {});
return test.ResponseMessage.IsSuccessStatusCode;
再一次,非常感謝托德。 該解決方案目前正在生產中創造奇跡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.