How can I get cookies from the HttpResponseMessage?
I'm getting an Index out of bound exception when executing following code. Not sure where the problem is:
using System;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Net;
namespace ConsoleApp1
{
internal class Program
{
static HttpClientHandler handler = new HttpClientHandler();
static HttpClient client = new HttpClient(handler);
static async Task Main(string[] args)
{
Console.WriteLine("Hello, World!");
await ReadCookies();
Thread.Sleep(15000);
}
static async Task ReadCookies()
{
for (int i = 0; i < 10; i++)
{
client.BaseAddress = new Uri("http://google.com");
var request = new HttpRequestMessage(HttpMethod.Get, "index.html");
var response = await client.SendAsync(request);
var cks = GetCookies(response);
Console.WriteLine(await response.Content.ReadAsStringAsync());
Thread.Sleep(1000);
foreach (Cookie ck in cks)
{
Console.WriteLine($"{ck.Name}:{ck.Value}");
}
}
}
static CookieCollection GetCookies(HttpResponseMessage message)
{
var cookies = new CookieCollection();
var setCookie = Enumerable.Empty<string>();
if (message.Headers.TryGetValues("Set-Cookie", out setCookie))
{
foreach (var cookieStr in setCookie)
{
foreach (var cookieToken in cookieStr.Split(';'))
{
var keyValueTokens = cookieToken.Split('=');
var cookie = new Cookie((keyValueTokens[0]).Trim(), (keyValueTokens[1]).Trim());
cookies.Add(cookie);
}
}
}
return cookies;
}
}
}