fiddlerを介してPOSTリクエストを監視し、それがどのように構成されているかを確認する必要があります。例えば :
{"userName":"you","password":"pwd"}
通常、サイトは、リクエストでCookieを受信することにより、ログインしていることを認識します。
HttpClientは、デフォルトで、特定のドメインから受信したCookieを、各シーケンシャルリクエストでそのドメインに送信します(そのHttpClientインスタンスを破棄するまで)
1)Cookieコンテナを作成し、それをHttpClientインスタンスに割り当てます。
2)HttpClientを使用してログインPOSTリクエストを作成します。
3)HttpClientを使用してデータGETリクエストを作成します。
4)応答からhtml文字列を読み取ります。
5)HtmlAgilityPack HtmlDocumentを使用して、Webからではなくhtml文字列からドキュメントをロードします(ほとんどの例が示すように)。
string baseUrl = "https://www.yourwebsite.com";
string loginUrl = "/Account/LogOn";
string sessionUrl = "/Data";
var uri = new Uri(baseUrl);
CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
using (var client = new HttpClient(handler))
{
client.BaseAddress = uri;
var request = new { userName = "you", password = "pwd" };
var resLogin = client.PostAsJsonAsync(loginUrl,request).Result;
if (resLogin.StatusCode != HttpStatusCode.OK)
Console.WriteLine("Could not login -> StatusCode = " + resLogin.StatusCode);
// see what cookies are returned
IEnumerable<Cookie> responseCookies = cookies.GetCookies(uri).Cast<Cookie>();
foreach (Cookie cookie in responseCookies)
Console.WriteLine(cookie.Name + ": " + cookie.Value);
var resData = client.GetAsync(dataUrl).Result;
if(resSession.StatusCode != HttpStatusCode.OK)
Console.WriteLine("Could not get data html -> StatusCode = " + resSession.StatusCode);
var html = resSession.Content.ReadAsStringAsync().Result;
var doc = new HtmlDocument();
doc.LoadHtml(html);
}