httpwebrequest\webclient を使用してサイトからデータをフェッチしようとしているので、30 秒ごとにサイトの html を取得するリクエストを送信しています。
何が起こっているのかというと、私がコンピュータからあまりにも多くのリクエストを送信したため、サービス拒否攻撃に対してサイトが私をブロックしているということです.
30 秒ごとにデータをフェッチせずに、サイトに新しいデータがあることを知るにはどうすればよいですか?
また
DoS 攻撃でブロックされることなく、30 秒ごとにサイトからデータを取得するにはどうすればよいですか?
わかりましたので、いくつかのコードを追加します:
public void DownloadFile(String remoteFilename, String localFilename)
{
Stream remoteStream = null;
Stream localStream = null;
HttpWebRequest gRequest = (HttpWebRequest)WebRequest.Create(remoteFilename);
gRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 GTBDFff GTB7.0";
gRequest.CookieContainer = new CookieContainer();
gRequest.Accept = " text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8, */*";
gRequest.KeepAlive = true;
gRequest.ContentType = @"application/x-www-form-urlencoded";
#region CookieManagement
if (gCookies != null && gCookies.Count > 0)
{
gRequest.CookieContainer.Add(gCookies);
}
HttpWebResponse gResponse;
try{
gResponse = (HttpWebResponse)gRequest.GetResponse();
//check if the status code is http 200 or http ok
if (gResponse.StatusCode == HttpStatusCode.OK)
{
remoteStream = gResponse.GetResponseStream();
localStream = File.Create(localFilename);
byte[] buffer = new byte[1024];
int bytesRead;
do
{
// Read data (up to 1k) from the stream
bytesRead = remoteStream.Read(buffer, 0, buffer.Length);
// Write the data to the local file
localStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
}
else
{
MessageBox.Show("Error!");
Application.Exit();
}
if (gResponse != null) gResponse.Close();
if (remoteStream != null) remoteStream.Close();
if (localStream != null) localStream.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
Application.Exit();
}
#endregion
}
そしてタイマーで:
DownloadFile("http://www.fxp.co.il/forumdisplay.php?f=2709", @"C:\tmph.html");
このフォーラムは売買フォーラムなので、30 秒ごとにフォーラムの html を取得し、htmlagilitypack を使用して未読の「購入」投稿の数を html で確認します。