電子書籍の厳選無料作品が豊富!

ブラウザを立ち上げることなくHPに自動ログイン後、特定の表示データを抽出してリアルタイムに更新表示させたい(ブラウザでは更新ボタンのクリックが必要)。

ニコニコ動画の自動ログイン方法が公開されていますのでそれを真似て下記のプログラムを作成し、見かけ上は正常に動作していますが、これって「GetHtml」を呼ぶ度にログイン → ログアウトを繰り返すのでしょうか?

もし、そうであればそれの回避方法を教えて頂けないでしょうか。(.Close()を呼ばないとか?)
また、その確認方法があれば併せてお願いします。

/// ログイン (起動時1回のみ呼び出し)
public bool LogIn()
{
 Hashtable hash = new Hashtable();
 hash["username"] = "name";
 hash["password"] = "123";
 hash["Login"] = "login";
 string s_param = "";
 foreach (string s in hash.Keys)
 {
 s_param += string.Format("{0}={1}&", s, hash[s]);
 }
 HttpPost("Https", s_param);
}
/// POST送信
public void HttpPost(string s_url, string s_param)
{
 httpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(s_url);
 CookieContainer cookieContainer = new CookieContainer();
 httpWebRequest.CookieContainer = cookieContainer;
 httpWebRequest.ContentType = "application/x-www-form-urlencoded";
 byte[] data = Encoding.ASCII.GetBytes(s_param);
 httpWebRequest.ContentLength = data.Length;
 httpWebRequest.Method = "Post";
 Stream reqStream = httpWebRequest.GetRequestStream();
 reqStream.Write(data, 0, data.Length);
 reqStream.Close();
 WebResponse webResponse = httpWebRequest.GetResponse();
 Stream resStream = webResponse.GetResponseStream();
 encoder = Encoding.GetEncoding("Shift_JIS");
 StreamReader streamReader = new StreamReader(resStream, encoder);
 spHtml = streamReader.ReadToEnd();
 streamReader.Close();
 webResponse.Close();
}

/// HTML受信(タイマーイベントで常時呼び出し)
private string GetHtml(string s_url)
{
 httpWebRequest = (HttpWebRequest)WebRequest.Create(s_url);
 httpWebRequest.CookieContainer = cookieContainer;
 webResponse = httpWebRequest.GetResponse();
 Stream resStream = webResponse.GetResponseStream();
 StreamReader streamReader = new StreamReader(resStream, encoder);
 string Html = streamReader.ReadToEnd();
 streamReader.Close();
 resStream.Close();
 return Html;
}

A 回答 (1件)

> ニコニコ動画の自動ログイン方法が公開されていますのでそれを真似て下記のプログラムを作成し、見かけ上は正常に動作していますが、これって「GetHtml」を呼ぶ度にログイン → ログアウトを繰り返すのでしょうか?


行いません。
ログインの為のHttpPostで得られたCookieをGetHtmlの中で渡しているので。

> また、その確認方法があれば併せてお願いします。
.NETのHTTP通信はFiddlerでキャプチャできます。
http://www.fiddler2.com/fiddler2/
これを起動した状態で実行すると,どのようにアクセスしているのかがわかると思いますよ。
    • good
    • 0
この回答へのお礼

回答、有り難うございました。

そうですか…。ログイン→ ログアウトは繰り返していないですか…。
実はウエブサイト管理者から連絡があって1日に40万回以上のログイン→ ログアウトが繰り返えされたとのことで、原因を探っているのですが犯人はこの部分くらいしか見当たらなかったもので…。

だとすると原因は何なんでしょうねぇ。逆に困ってしまいました。
何かお気づきのことがありましたら再度ご教示頂けると有難いです。

取り敢えず、紹介して頂いたFiddlerで探ってみます。

お礼日時:2012/08/11 01:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!