如果这是非常明显的事情,我只是想念,请接受我的道歉。我有一个 perl 脚本,它以每分钟超过 100 次调用的突发速率访问 Asana restful API。当我对其进行压力测试时,我偶尔会达到他们的速率限制并看到错误 429。我从阅读 Asana 的文档中知道它会返回一个“重试后”响应标头,但我终生无法弄清楚如何检索/打开/读取此标头。您可以提供的任何建议将不胜感激。
编辑:我的代码附在下面。当然,我已经删除了敏感信息,例如我的 API 密钥和项目编号,但核心代码在这里。如果我只运行一次,它每分钟不会产生足够的调用来触发错误。我必须同时运行它大约 3-4 次才能产生错误。有人可能会说“不要那样做”。虽然正确,但这个练习的重点是产生错误,所以同时运行四次是好的。
当您使用有效的 API 密钥和项目编号执行此操作时,有时您会收到此错误:
{"errors":[{"message":"You have made too many requests recently. Please, be chill."}]}
我的问题是如何检索显然包含重试后字段以及几秒钟的标题。每次返回错误时,我可能会采取 20 秒的延迟构建,但我更愿意更优雅地处理错误。
#!/usr/local/bin/perl
my $counter = 0;
my $AsanaAPIcode = "...";
my $AsanaProjectID = "...";
my $AsanaFullString = 'curl -u ' . $AsanaAPIcode . ': https://app.asana.com/api/1.0/projects/' . $AsanaProjectID . '?opt_fields=archived';
my $APIoutput = `$AsanaFullString`;
print $APIoutput;
my $startTime = time;
my $totalCount = 200;
while ($counter<=$totalCount) {
print $counter . "\n";
$APIoutput = `$AsanaFullString`;
print $APIoutput . "\n";
$counter++;
}
my $endTime = time;
my $totalTime = $endTime - $startTime;
print "Total time = " . $totalTime . " seconds.\n";
print $totalCount / ($totalTime / 60) . " API calls per minute.\n";
print "end";