ログイン時にメンバーのメールを表示する Web ページをスクラップしたいのですが、2 つの Web ブラウザー コントロールを使用して、1 つはログイン用、もう 1 つは Web ブラウザーを必要なページに使用して実行できます。
何千もの URL があるので、http リクエストとレスポンスを使用し、regax 式を使用して必要な出力を取得したいと考えています。
とにかく、ログインを記憶してすべてのメンバーのメールを表示する http リクエストはありますか?
ログイン時にメンバーのメールを表示する Web ページをスクラップしたいのですが、2 つの Web ブラウザー コントロールを使用して、1 つはログイン用、もう 1 つは Web ブラウザーを必要なページに使用して実行できます。
何千もの URL があるので、http リクエストとレスポンスを使用し、regax 式を使用して必要な出力を取得したいと考えています。
とにかく、ログインを記憶してすべてのメンバーのメールを表示する http リクエストはありますか?
これは簡単です。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;
}