私以外のWebサイトの情報が必要です。この情報を取得するには、Webサイトにログインして情報を収集する必要があります。これは、HTMLフォームを介して行われます。 C#でこの認証済みスクリーンキャプチャを行うにはどうすればよいですか?
追加情報:
あなたはちょうどあなたがフォームに記入したかのようにリクエストをするでしょう。 POSTたとえば、次のように仮定します。正しいデータを使用してPOSTリクエストを作成します。今、スクレイピングしたい同じページに直接ログインできない場合、ログインリクエストの後に設定されたCookieを追跡し、それらをスクレイピングリクエストに含めて、ログイン状態を維持できるようにする必要があります。
次のようになります。
HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;
http.CookieContainer = new CookieContainer();
http.CookieContainer.Add(httpResponse.Cookies);
HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;
多分。
WebBrowser コントロールを使用できます。サイトのURLをフィードし、DOMを使用してユーザー名とパスワードを適切なフィールドに設定し、最終的にクリックを送信ボタンに送信します。この方法では、2つの入力フィールドと送信ボタン以外は何も気にしません。 Cookieの処理、生のHTML解析、HTTPスニッフィングはありません。これらはすべてブラウザコントロールによって行われます。
そのようにした場合、さらにいくつかの提案:
場合によっては、httpResponse.Cookies
は空白になります。代わりにCookieContainer
を使用してください。
CookieContainer cc = new CookieContainer();
HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
http.CookieContainer = cc;
string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;
http.CookieContainer = cc;
HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;
ダンビンアンサーへの追加として
http.AllowAutoRedirect=false;
さもないと
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
最初のURLに対して別のリクエストが行われ、url2を取得できなくなります。
HTTPWebRequestを使用してPOSTを実行する必要があります。このリンクはあなたが始めるのに役立つはずです。重要なのは、投稿しようとしているページのHTMLフォームを見て、投稿を送信するためにフォームに必要なすべてのパラメーターを確認する必要があることです。
http://www.netomatix.com/httppostdata.aspx
http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx