是否可以限制每秒的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();
}

是否可以限制每秒的Web请求数

您需要 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() 释放信号量,挂起的线程将继续。