【问题标题】:HttpClient is sending additional CookiesHttpClient 正在发送额外的 Cookie
【发布时间】:2021-07-15 20:42:56
【问题描述】:

使用 .NET Core 3.1 DI,我使用 Azure 函数内的 HttpClient 实例将数据发送到外部 API。

var clientRequest = new HttpRequestMessage(HttpMethod.Post, clientConfig.BaseURL + RequestParam);

string payloadBody = GenerateLoginPayload(clientConfig.Username, clientConfig.Password);
clientRequest.Content = new StringContent(payloadBody, Encoding.UTF8, "application/json");
clientRequest.Headers.Clear();

var response = await _api.SendAsync(clientRequest);

如您所见,我什至清除了 clientRequest 标头。但是,检查 Fiddler 时,它仍在发送额外的 Cookie 标头。这弄乱了我们的请求,至于 API,不能发送过去的 Cookie。

Cookie: KEY_PHPSESSID=HehRVwcsmiUmoxO4zYaOpO1B9hm%2BfAK9igvuRw4YjgA%3D%3AJ7Bgip94EQjfJ%2FSt5RcnFTY3jcZ%2FlChCoyK54v%2Fu%2FJI%3D
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 87

我的问题是,添加额外的 Cookie 标头值是什么,如何清除或删除它?

我还检查了这个SO question about extra cookies being sent,这与我的情况相似,但它似乎不适用于 Azure Functions 和 .NET Core,因为我没有提到 Windows.Web.Http.HttpClient

这也是我注册 HttpClient 的方式,_api.SendAsync() 在多个端点上被重复使用多次,并且 Cookie 可能源自之前的调用。如何确保 Cookie 不会泄露给其他请求?

builder.Services.AddHttpClient<IApiCaller, ApiCaller>()
  .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler() { UseCookies = false })
  .AddPolicyHandler(HttpRetryPolicies.RetryWithJitter());

【问题讨论】:

  • 像你一样添加UseCookies = false,帮我解决这个问题。

标签: c# cookies dotnet-httpclient .net-core-3.1


【解决方案1】:

可能是HttpClient本身的DefaultRequestHeader。

你可以试试_api.DefaultRequestHeaders.Clear();

【讨论】:

  • 这个我也试过了。还是同样的问题。我什至尝试了我的代码版本,其中我使用了HttpClient 的静态实例,并以相同的方式清除了标头,并且仍在发送 Cookie。
  • 您是否尝试过从HttpClientFactory 创建HttpClient 的实例,而不是从DI 中创建实例?
  • 我们最初使用的是这种模式。然而,我们偶尔会遇到 Dryloc 和 Disposed 范围的问题,我们暂时离开了该模式。但我确实相信无论 DI 模式如何,代码都应该能够删除额外的标头。
【解决方案2】:

在请求前下断点,查看内容

clientRequest.DefaultRequestHeaders.GetCookies()

如果 cookie 在那里,它可能会在您的 ApiCaller 的实现中设置。如果那里没有 cookie,则可能是由 Azure 中的设置/代理设置的

【讨论】:

  • 没有 cookie,直到 SendAsync() 方法。这就是为什么它很难跟踪,因为它没有在本地调试中显示,但在 Fiddler 中非常可见。
猜你喜欢
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多