あなたはフィドラーを介してPOSTリクエストを観察し、どのように構造化されているかを確認する必要があります。例えば :
{"userName":"you","password":"pwd"}
通常、サイトはあなたがあなたのリクエストでそのクッキーを受信することにより、ログインしていることを認識するであろう。
1)クッキーのコンテナを作成します(HttpClientをそのインスタンスを配置まで)とあなたのHttpClientインスタンスに割り当てられ、デフォルトで
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);
}
ありがとうございました。 私は見ていましたが、間違いなく私はログインしているウェブサイトのソースコードをコーディングするためにHTMLAgilityPackを使用する必要があります。 私は何かをやったことがありますが、後でちょっと立ち往生しました。私はwebbrowser1の制御でログインし、そのセッションのクッキーを取得します。 HTMLAgilityPackを使用してそのCookieを適用し、そのCookieを使用してページを開くことはできますか? – touyets
@ user1842134 - いいえ、HAPはCookieを処理せず、処理できません。 – Oded
okありがとう – touyets