アプリケーションでWeb上の操作を疑似的に行いたい時などで、クッキー情報を取り出して値を確認したい時などがあります。
そういった場合は、HttpClientHandlerのUseCookiesを有効にしてあげれば、あとは.Netがよきに計らってくれるらしい。
基本的にはtoriimiyukkiの日記さんに書かれていることですが、個人的な用途としてメモ書きです。
// クッキーを使いたいためUseCookies = trueに設定
using (var handler = new HttpClientHandler() { UseCookies = true })
using (var client = new HttpClient(handler) { BaseAddress = new Uri("https://yamahide.biz/") })
{
// ヘッダーの設定
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0");
client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
client.DefaultRequestHeaders.Add("Accept-Language", "ja,en-us;q=0.7,en;q=0.3");
client.DefaultRequestHeaders.Add("Referer", "https://yamahide.biz/login/");
// GETでリクエスト
var result = client.GetAsync("https://yamahide.biz/login/").Result;
// POSTの内容を作成
var content = new FormUrlEncodedContent(
new Dictionary
{
{ "UserID", "user01"},
{ "PASSWORD", "Passw0rd"},
});
// POSTでリクエスト
result = client.PostAsync("https://yamahide.biz/login/", content).Result;
// クッキーの値を抜き出す
CookieCollection cookies = handler.CookieContainer.GetCookies(new Uri("https://yamahide.biz/login/"));
string ASPNETSessionId = "";
foreach (System.Net.Cookie cook in cookies)
if (cook.Name == "ASP.NET_SessionId")
{
ASPNETSessionId = cook.Value;
}
}