是否可以限制每秒的Web请求数
本文关键字:Web 请求 是否 | 更新日期: 2023-09-27 18:32:28
嗨,我正在抓取网站并阅读内容。我想保持请求率合理。每秒最多大约 10 个请求可能没问题。目前是每分钟 5k 个请求,它会导致安全问题,因为这看起来是一个机器人活动。怎么做?这是我的代码
protected void Iterareitems(List<Item> items)
{
foreach (var item in items)
{
GetImagesfromItem(item);
if (item.HasChildren)
{
Iterareitems(item.Children.ToList());
}
}
}
protected void GetImagesfromItem(Item childitems)
{
var document = new HtmlWeb().Load(completeurl);
var urls = document.DocumentNode.Descendants("img")
.Select(e => e.GetAttributeValue("src", null))
.Where(s => !string.IsNullOrEmpty(s)).ToList();
}
您需要 System.Threading.Semaphore,使用它就可以控制最大并发线程/任务数。下面是一个示例:
var maxThreads = 3;
var semaphore = new Semaphore(maxThreads, maxThreads);
for (int i = 0; i < 10; i++) //10 tasks in total
{
var j = i;
Task.Factory.StartNew(() =>
{
semaphore.WaitOne();
Console.WriteLine("start " + j.ToString());
Thread.Sleep(1000);
Console.WriteLine("end " + j.ToString());
semaphore.Release();
});
}
您最多可以看到 3 个任务正在运行,其他任务因达到最大限制而挂起semaphore.WaitOne()
,如果另一个线程通过 semaphore.Release()
释放信号量,挂起的线程将继续。