为什么在Web浏览器加载网页时,perl脚本从YouTube服务器获取“ 429太多请求”,[重复]

问题描述 投票:1回答:1

当同一台计算机上的任何网络浏览器正确下载YouTube网页时,[YouTube会将Perl脚本返回429 Too many requests

搜索YouTube的“速率限制”超时失败。

[youtube-dl相似性质的参考文献很多。

此刻,我感到困惑的是,为什么Web浏览器运行良好,但是perl脚本获取“ 429太多请求”才能检索单个网页。

我对存储在数据库文件中的已收藏书签视频进行了大规模的“验证”,超过24小时前。到目前为止,429 Too many requests仍然是perl脚本从YouTube服务器获得的答案。

尝试在Perl脚本中欺骗代理并没有改变结果

$ua->agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36');

欢迎提供任何线索以更好地理解该问题。

在某处描述了针对DDOS攻击的YouTube服务器上的速率限制超时值(如Retry-After: 3600所述,很高兴对此信息进行引用。

使用的片段代码捕获带有YouTube播放列表网址的网页

use strict;
use warnings;
use feature 'say';

use HTTP::Tiny;
use Getopt::Long qw(GetOptions);

use Data::Dumper;

my %opt;

$opt{url} = 'https://www.youtube.com/watch?v=XdTdu1MxDpE&list=UUgDFVgTnw_W5DftgN2NQApQ';

GetOptions(
        'url|u=s'   => \$opt{url},
        'debug|d'   => \$opt{debug},
        'help|?'    => \$opt{help},
        'man'       => \$opt{man}
) or pod2usage(2);

pod2usage(1) if $opt{help};
pod2usage(-exitval => 0, -verbose => 2) if $opt{man};

my $response = HTTP::Tiny->new->get($opt{url});

say Dumper($response) if $opt{debug};

if( $response->{success} ) {
    say $response->{content};
} else {
    say "Failed: $response->{status} $response->{reason}";
}

__END__

=head1 NAME

.......

输出

Failed: 429 Too Many Requests
perl youtube rate-limiting
1个回答
1
投票
作为一项非常受欢迎的服务,他们可能会不断更改秘密规则,以适应各种攻击。迷信还包括:

处理cookie,也许从交互式浏览器中添加已解决验证码的cookie

    不使用IPv6
  • 每秒少于一个请求
  • 不要使用可疑的用户代理字符串
© www.soinside.com 2019 - 2024. All rights reserved.