【问题标题】:How to prevent php curl from multi connecting如何防止php curl多连接
【发布时间】:2012-10-18 21:00:28
【问题描述】:

我构建了一个 php cli 脚本,它将推文从 twitter 流 api 输出到带有 cURL 的命令行。当我启动脚本时,它开始输出推文,但在每 50 条推文时,我都会收到以下错误:“很容易,Turbo。最近请求太多。增强你的冷静。”,没有标题,没有其他输出,只有一个字符串。

我假设我建立了太多的连接,但我只初始化了一次 cURL。这是我的代码:

//initialize cURL connection
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://stream.twitter.com/1.1/statuses/filter.json?  follow=34572451,27260086');
curl_setopt($ch, CURLOPT_USERPWD, 'USERNAME:PASSWORD');
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'saveTweet');
curl_setopt($ch, CURLOPT_MAXCONNECTS, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Cache-Control: max-age=0', 'Connection: keep-alive', 'Keep-Alive: 3600'));

//then loop the execution to retrieve tweets
while(1){
    echo $i++.'->'; //echo number, so we know it stops at 50

    try {
        //calls saveTweet() as callback, which only purpose is to output the tweet
        curl_exec($ch); 
    }
    catch(Exception $e) {
        //echo error described above
        echo $e->getMessage(); 
        break;
    }
}

如何防止 cURL 发出太多请求(如果是这样,我真的不知道确切的问题)?或者如何防止出现上述错误?

【问题讨论】:

  • TPS 是什么意思?我尝试在 whileloop 中设置睡眠(1 到 30 秒),但没有奏效。

标签: php api twitter streaming


【解决方案1】:

你可以像 sleepusleep 那样运行一次无限循环

sleep(1);

您还想查看计数选项count

指定要检索的记录数。必须小于或等于 200。默认为 20。

这样你就可以用一个请求拉更多的记录...

【讨论】:

  • 我尝试了 sleep()。没用。我不想做多个请求,我想做相反的事情——保持流连接打开(Twitter Streaming API,而不是 REST API)
  • 如果它是Streaming API,那么你不需要循环:使用这个:stackoverflow.com/a/12915348/1226894
  • 哇,谢谢。那行得通。我停止循环并在回调函数中返回 strlen()。现在它继续运行:-)
【解决方案2】:

显然你打开了太多的连接:

curl_setopt($ch, CURLOPT_FORBID_REUSE, true);

您可以将连接集中起来以供重用并测试它吗?

TPS:事务/秒 DOS:拒绝服务;用完资源

【讨论】:

  • 我确实尝试将 CURLOPT_FORBID_REUSE 设置为 false(甚至将其从选项中删除),但我得到了同样的结果。
猜你喜欢
  • 2019-06-08
  • 2014-08-13
  • 1970-01-01
  • 2016-03-04
  • 2020-11-10
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多