【问题标题】:limit curl requests per user限制每个用户的 curl 请求
【发布时间】:2014-11-07 18:32:06
【问题描述】:

我搜索了所有内容,但没有看到与此问题相关的任何内容。我有一个 curl 脚本,它从网站获取随机生成的 10 个字符的字符串。我已获得网站所有者的许可,可以获取此数据并将其显示在我的博客上。我的问题是,当用户访问我的网站时,它会显示字符串,如果他们刷新页面,它将显示一个新字符串。如何限制每个用户一个字符串,使他们不能一遍又一遍地刷新以获得多个字符串?

这是我的代码所基于的示例 curl:

$url = "http://m.www.yahoo.com/";  
$ch = curl_init();  

curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_HEADER, 0);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  

$output = curl_exec($ch);  

preg_match('/<dl class="markets clearfix strong small">(.*)<\/dl>/is', $output, $matches);  
echo $matches[0];  

curl_close($ch);  

【问题讨论】:

  • 您尝试过会话或cookies吗?或者,如果您想要更高级的解决方案,只需要求用户登录并将生成的字符串设置为某些用户字段。
  • 您可以更进一步,使用数据库、内存缓存或文件作为每个 ip/用户代理组合的计数器,这样用户就不能只清除 cookie 以获得一组新的 curl 请求。
  • @Robik 我可以将$matches[0]; 放在会话中吗?

标签: php curl limit


【解决方案1】:

也许你可以使用会话变量来检查用户是否已经得到了一个字符串。

function startSession(){
    $id = session_id();
    if ($id != '')
        session_write_close();

    if (isset($_COOKIE['PHPSESSID']) && $id != $_COOKIE['PHPSESSID']) {
        session_write_close();
        session_id($_COOKIE['PHPSESSID']);
    }

     session_start();
}

//Start your sessions

startSession();
if (!$_SESSION['UserGotAString']) {
    echo "Some Error msg"
    return;
}
session_write_close();

//Request to Yahoo and regex match comes here..

// Start a session
startSession();
$_SESSION['UserGotAString'] = true
echo $matches[0];
session_write_close();

我不确定这是否是一个好方法。另外,如果您想根据计时器重置会话变量,请检查此链接 Set timeout in php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2012-09-03
    • 2013-08-16
    相关资源
    最近更新 更多