【发布时间】:2012-11-15 21:52:04
【问题描述】:
如果这是非常明显的事情,我只是想念,请接受我的道歉。我有一个 perl 脚本,它以每分钟超过 100 次调用的突发速率访问 Asana restful API。当我对其进行压力测试时,我偶尔会达到他们的速率限制并看到错误 429。我通过阅读 Asana 的documentation 知道它将返回一个“重试后”响应标头,但我无法弄清楚我的一生如何检索/打开/读取此标头。如果您能提供任何建议,我们将不胜感激。
编辑: 我的代码附在下面。当然,我已经删除了敏感信息,例如我的 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";
【问题讨论】:
-
显示你在 perl 中做什么来调用 API,否则没有人可以帮助你。
-
没有代码,我们唯一能说的就是'检查标题'。这不是很有帮助,是吗?所以,请edit您的问题并添加一些代码。如果您不确定我们想看到什么,请查看whathaveyoutried.com。