【问题标题】:Throttling method cURL节流方法 cURL
【发布时间】:2020-12-03 07:24:14
【问题描述】:

我正在使用 api 开发一个项目,我的订阅允许我每秒 2 个请求。

此 API 允许您查找与另一个单词相关的单词。

我的项目是递归使用这个 API。 单词 A 给出单词 B 和 C 单词 B 和 C 分别给出 2 个单词,等等,递归地,在用户指定的限制上。

我将每个单词存储在一个“单词”对象中。在这个对象的 __construct 中,我调用了调用这个 API 的函数,它将每个结果转换为一个新的对象。

一切正常,唯一担心的是,当指定的递归层太高时,API 不会返回任何内容,即使我有一个 0.5 秒的计时器。

所以我设置了一个循环。只要对我的 cURL 请求的响应不是 200,我就会重播它,计时器为 0.5 秒。

        $a = 200;
        $httpcode = 0;
        while ($httpcode !== $a) {

            $postRequest = [
                'content' => $this->getMot(),
                'lang' => 'fr',
                'limit' => $this->getLimite(),
                'key' => "//////////////////////"
            ];
            $cURLConnection = curl_init('https://api.keywords.gg/entities');
            curl_setopt($cURLConnection, CURLOPT_HTTPHEADER,
                ['Content-Type: application/json']);
            curl_setopt($cURLConnection, CURLOPT_POSTFIELDS, json_encode($postRequest));
            curl_setopt($cURLConnection, CURLOPT_RETURNTRANSFER, true);
            $apiResponse = curl_exec($cURLConnection);
            $httpcode = curl_getinfo($cURLConnection, CURLINFO_HTTP_CODE);
            $apiResponse = curl_exec($cURLConnection);
            curl_close($cURLConnection);
        }

我认为我的节流方法是错误的。你能给我一些建议吗?

【问题讨论】:

  • 在此处发布您的实际代码,而不是您的代码图片。
  • 代码图像不利于可访问性,不利于搜索,并且无法复制代码以运行它以查找任何错误。

标签: php curl throttling


【解决方案1】:

正如您在sleep documentation 中看到的那样,它需要一个整数。

您发送一个浮点数 0.6,然后转换为整数值 0。

所以你的睡眠电话变成了:

sleep(0)

如果您需要更高的精度,您需要使用usleep(int microseconds)

usleep(600)

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 2019-01-26
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2017-03-15
    • 2020-02-13
    • 1970-01-01
    相关资源
    最近更新 更多