我知道您可以通过在请求处理程序中添加一个CookieContainer来获取cookie。
但是,除非我将UseCookies设置为false,否则以下post请求将失败:
static CookieContainer cookies = new CookieContainer();
var clientHandler = new HttpClientHandler
{
//Original Apporach - this fails the POST request
// UseCookies = true,
// CookieContainer = cookies,
//I had to do this
UseCookies = false,
};
var client = new HttpClient(clientHandler);
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("*redacted*"),
Headers =
{
{ "cookie", "SampleCookie" },
},
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{ "Provider", "Email" },
{ "Code", "12345" },
{ "RememberMe", "False" },
{ "RememberBrowser", "false" },
{ "__RequestVerificationToken", "SampleToken" },
}),
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}老实说,对HTTP请求不是很了解。我原来的方法是不是因为我手动设置cookie而失败了?
发布于 2020-10-12 21:28:44
请求失败的原因可能取决于许多因素--比如身份验证和所需的其他头部,如果不知道您试图访问的具体内容,就很难判断是什么导致了请求失败。这里有一个简单的例子,展示了如何向Google首页发出请求,并将所有cookie放入容器中,并在控制台应用程序中打印出来:
static void Main(string[] args)
{
var uri = new Uri("https://google.com");
var cookies = new CookieContainer();
var handler = new HttpClientHandler();
handler.CookieContainer = cookies;
using (var client = new HttpClient(handler))
{
var result = client.GetAsync(uri).Result;
}
foreach (Cookie cookie in cookies.GetCookies(uri))
{
var print = $"cookie name: {cookie.Name}\ncookie value: {cookie.Value}\n";
Console.WriteLine(print);
}
}https://stackoverflow.com/questions/64317723
复制相似问题