当同一台计算机上的任何网络浏览器正确下载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
处理cookie,也许从交互式浏览器中添加已解决验证码的cookie