私はこの情報を得るために、私がウェブサイトにログインして情報を収集する必要がある、これは私のものではないウェブサイトからの情報を必要とします。これはHTMLフォームを通じて行われます。どのようにC#でこの認証されたスクリーンセーピングを行うことができますか?screenscapeにウェブサイトにプログラムでログインするにはどうすればいいですか?
追加情報:
- クッキーベースの認証。
- POSTアクションが必要です。
私はこの情報を得るために、私がウェブサイトにログインして情報を収集する必要がある、これは私のものではないウェブサイトからの情報を必要とします。これはHTMLフォームを通じて行われます。どのようにC#でこの認証されたスクリーンセーピングを行うことができますか?screenscapeにウェブサイトにプログラムでログインするにはどうすればいいですか?
追加情報:
フォームに記入したようにリクエストします。たとえば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;
多分。
HTTPWebRequestを使用してPOSTを実行する必要があります。このリンクはあなたが始めるのを助けるはずです。重要なのは、ポストを送信するためにフォームに必要なすべてのパラメータを表示するために投稿しようとしているページのHTMLフォームを調べる必要があることです。
http://www.netomatix.com/httppostdata.aspx
http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx
うん、私は(ほとんどの時代に使用されているので)私が次のページのために私と一緒にクッキーを保つことを言及することを忘れた最も難しい部分です。 –
あなたはWebBrowserコントロールを使用することができます。それにサイトのURLを入力し、DOMを使用してユーザー名とパスワードを正しいフィールドに設定し、最終的には送信ボタンにクリックを送信します。この方法では、2つの入力フィールドと送信ボタン以外は気にしません。クッキーの処理、生のHTML解析、HTTPスニッフィングがありません。これはすべてブラウザコントロールによって行われます。
あなたがその道を行く場合は、さらにいくつかの提案:
そうでない場合
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
それは別の要求がURLを初期するようになりますし、あなたが取得することはできません
http.AllowAutoRedirect=false;
を持っていることが必要ですurl2。
場合によっては、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;
これは本当にうまくいった、ありがとう。 –
ありがとう、これは私が使用できるもののように見えますが、私がプログラミングに戻ったときにこの答えを受け入れるでしょう。 :-) –
これは、WebページがプレーンなHTML形式で、フォームがJavascript経由で動的に生成されている場合に機能します。これは機能しますか? – Souper
@Superはおそらくそうではありません。サインインからあなたが掻きたいページへのリクエストが何であるかを調べ、その動作を模倣したリクエストを作成したいと思うでしょう。 – dlamblin