7

フォームログインで保護されたWebサイトのスクリーンスクレイパーを作成することは可能でしょうか。もちろん、私はサイトにアクセスできますが、サイトにログインして自分の資格情報をC#に保存する方法がわかりません。

また、C#のスクリーンスクレーパーの良い例をいただければ幸いです。

これはすでに行われていますか?

4

2 に答える 2

6

とてもシンプルです。カスタム ログイン (HttpPost) メソッドが必要です。

次のようなものを考え出すことができます (この方法では、ログイン後に必要なすべての Cookie を取得し、それらを次の HttpWebRequest に渡すだけで済みます)。

public static HttpWebResponse HttpPost(String url, String referer, String userAgent, ref CookieCollection cookies, String postData, out WebHeaderCollection headers, WebProxy proxy)
    {
        try
        {
            HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
            http.Proxy = proxy;
            http.AllowAutoRedirect = true;
            http.Method = "POST";
            http.ContentType = "application/x-www-form-urlencoded";
            http.UserAgent = userAgent;
            http.CookieContainer = new CookieContainer();
            http.CookieContainer.Add(cookies);
            http.Referer = referer;
            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;
            headers = http.Headers;
            cookies.Add(httpResponse.Cookies);

            return httpResponse;
        }
        catch { }
        headers = null;

        return null;
    }
于 2009-05-23T08:46:54.760 に答える
4

確かに、これは行われました。私はそれを数回やったことがあります。これは(一般的に)スクリーンスクレイピングまたは Web スクレイピングと呼ばれます。

この質問を見てください(また、「 screen-scraping 」というタグの下にある質問を参照してください。スクレイピングは、Web リソースからのデータ抽出に関連するだけでなく、オンライン フォームへのデータの送信も含むことに注意してください。ログインフォームなどの入力を送信するときのユーザーのアクション。

于 2009-05-23T07:48:58.760 に答える