問題: 私の Web スクレイパーでは、Web サイト上の特定のソース コードにアクセスするにはログイン ユーザーが必要です。この制限を回避するには、プログラムにログイン機能を実装するにはどうすればよいですか?
答え: 指定された Web サイト (mmoinn.com/index.do?PageModule=UsersLogin) にログインするには、以下の手順に従います:
1. ログインフォームに POST リクエストを送信します
ログイン資格情報をフォーム POST にフォーマットします:
<code class="language-csharp">string formUrl = "http://www.mmoinn.com/index.do?PageModule=UsersAction&Action=UsersLogin"; string formParams = string.Format("email_address={0}&password={1}", "您的邮箱地址", "您的密码"); WebRequest req = WebRequest.Create(formUrl); req.ContentType = "application/x-www-form-urlencoded"; req.Method = "POST"; byte[] bytes = Encoding.ASCII.GetBytes(formParams); req.ContentLength = bytes.Length; using (Stream os = req.GetRequestStream()) { os.Write(bytes, 0, bytes.Length); } WebResponse resp = req.GetResponse(); string cookieHeader = resp.Headers["Set-cookie"];</code>
2. ログインページを取得します
ログイン フォームから取得した Cookie ヘッダーを含む目的のページへの GET リクエストを作成します:
<code class="language-csharp">string getUrl = "登录后页面的URL"; WebRequest getRequest = WebRequest.Create(getUrl); getRequest.Headers.Add("Cookie", cookieHeader); WebResponse getResponse = getRequest.GetResponse(); using (StreamReader sr = new StreamReader(getResponse.GetResponseStream())) { string pageSource = sr.ReadToEnd(); }</code>
追加メモ:
ログイン POST の応答を確認したい場合は、次のコード行を追加できます。
<code class="language-csharp">using (StreamReader sr = new StreamReader(resp.GetResponseStream())) { string pageSource = sr.ReadToEnd(); }</code>
pageSource 文字列を確認して、サーバーの応答を確認します。
以上がC# を使用してプログラムで Web サイトにログインするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。