【问题标题】:PHP kill ongoing multi curl requestsPHP杀死正在进行的多卷曲请求
【发布时间】:2017-08-04 04:12:44
【问题描述】:

如果其中一个请求收到状态码 429,是否可以终止/停止多个 curl 请求?

当我从 API 提取数据并且需要避免超过速率限制时,我一直在尝试寻找解决方案。

这些请求是异步的,所以我不确定该怎么做。

【问题讨论】:

    标签: php http curl nginx curl-multi


    【解决方案1】:

    好吧,您应该能够使用 CURLOPT_PROGRESSFUNCTION 随意取消它们,有一个用于是否取消传输的全局变量,一个导入它的函数(使用global $var 语法),并使其在以下情况下返回 1是时候取消了,例如$abort=false;ecurl_setopt($ch,CURLOPT_PROGRESSFUNCTION,function($a,$b,$c,$d,$e){global $abort;return (int)!$abort;}); - 然后只需 $abort=true;何时中止它们。也就是说,你可以使用 CURLOPT_MAX_RECV_SPEED_LARGE 来限制传输的速度,如果你超过了速度限制

    编辑:请注意,您还需要将 CURLOPT_NOPROGRESS 设置为 false 才能完全调用 CURLOPT_PROGRESSFUNCTION。

    【讨论】:

    • 谢谢,似乎停止了大多数请求,但不是全部,总比没有好。我没有使用 abort 变量,而是使用 memcache 来存储变量并以这种方式检查它。希望能阻止我收到太多 429 响应,用异步请求实现速率限制器有点困难。
    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    相关资源
    最近更新 更多