0

ログイン時にメンバーのメールを表示する Web ページをスクラップしたいのですが、2 つの Web ブラウザー コントロールを使用して、1 つはログイン用、もう 1 つは Web ブラウザーを必要なページに使用して実行できます。

何千もの URL があるので、http リクエストとレスポンスを使用し、regax 式を使用して必要な出力を取得したいと考えています。

とにかく、ログインを記憶してすべてのメンバーのメールを表示する http リクエストはありますか?

4

1 に答える 1

0

これは簡単です。WebBrowser コントロールを使用してログインし、完了したら、Cookie 情報を次のようなコンテナーに保存します。

           string[] array = webBrowser.Document.Cookie.Split(new char[]
                        {
                            ';'
                        });
                        for (int i = 0; i < array.Length; i++)
                        {
                            string cookie = array[i];
                            string name = cookie.Split(new char[]
                            {
                                '='
                            })[0];
                            string value = cookie.Substring(name.Length + 1);
                            string path = "/";
                            string domain = "abc.com";
                            yummycookies.Add(new Cookie(name.Trim(), value.Trim(), path, domain));
                        }

これでコンテナ内に Cookie があり、この Cookie コンテナで HttpWebRequest を使用すると、ログイン Cookie があるため、すでにログインしているようになります。

 public  string getHtml(string url)
    {
        string responseData = "";
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Accept = "*/*";
            request.AllowAutoRedirect = true;
            request.UserAgent = "http_requester/0.1";
            request.Timeout = 60000;
            request.Method = "GET";
            request.CookieContainer=yummycookies;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            if (response.StatusCode == HttpStatusCode.OK)
            {
                Stream responseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(responseStream);
                responseData = myStreamReader.ReadToEnd();
            }
            response.Close();
        }
        catch (Exception e)
        {
            responseData = "An error occurred: " + e.Message;
        }
        return responseData;
    }
于 2013-02-15T21:18:54.500 に答える