c# RestSharp:添加和删除 cookie 因为 Statuscode 403

c# RestSharp: Adding and delete cookie because Statuscode 403

我目前正在尝试使用 RestSharp(版本 107.1.2)获取外部 API 的信息。不幸的是,在每个请求中,我都会收到状态代码 403“禁止访问”的响应。我现在联系了提供商,他告诉我,先删除所有 cookie,然后添加 cookie“SMCHALLENGE=YES”。

我在 RestSharp 中尝试过,但是在使用 client.AddCookie 扩展时,我收到 ArgumentException。我现在找到了另一个选项,在 header 中添加 cookie,但这也不起作用。

您知道如何删除所有 cookie 然后添加 SMCHALLENGE cookie 吗?

  var client = new RestClient("https://test.de/api/token");
  string resource = null;
  client.Authenticator = new HttpBasicAuthenticator("testUser", "testPW");
  string apiKey = null;
  var request = new RestRequest(resource, Method.Get);

  //Following execution throws System.ArgumentException: "The {0} parameter cannot be an empty string. Parameter name: cookie.domain"
  //client.AddCookie("SMCHALLENGE", "YES");
  request.AddHeader("Cookie", "SMCHALLENGE=YES");

  var response = client.ExecuteAsync(request);
  response.Wait();
  RestResponse rr = response.Result;

非常感谢!

Cookie 不是 headers。您需要将您的 cookie 添加到 RestClient 自己的 cookie 容器中。响应中返回的 cookie 也将在 cookie 容器中可用。 RestClient 上有一个函数可以作为快捷方式执行此操作。

var client = new RestClient("https://test.de/api/token");
client.AddCookie("SMCHALLENGE", "YES");

您还可以使用 cookie 容器:

client.CookieContainer.Add(new Cookie(...));

您需要避免为每个请求创建一个新的 RestClient 实例。这样您还可以跨请求保留 cookie。