SCF 是什么?
无服务器云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。
数据库结构
1 2 3 4 5
| CREATE TABLE `proxy` ( `id` int(11) NOT NULL PRIMARY KEY, `value` varchar(21) NOT NULL, `create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) CHARSET=utf8;
|
PHP代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| <?php ini_set('date.timezone', 'Asia/Shanghai');
function main_handler($event, $context) { $maxNumber = 100;
$failureTime = '-5 minute';
$event = (array)$event;
$queryString = (array)$event['queryString'];
$time = date('Y-m-d H:i:s', strtotime($failureTime));
$dbh = new PDO('mysql:host=127.0.0.1;dbname=dbname', 'username', 'password');
if (!isset($queryString['ip'])) { $delete = $dbh->prepare('DELETE FROM `proxy` WHERE `create_at` < ?'); $delete->execute([$time]);
$result = $dbh->prepare('SELECT count(*) FROM `proxy` WHERE `create_at` >= ?'); $result->execute([$time]);
$currentNumber = (int)$result->fetchColumn();
$url = 'http://www.66ip.cn/mo.php?sxb=&tqsl=10&port=&export=&ktip=&sxa=&submit=%CC%E1++%C8%A1&textarea=';
$ips = [];
while (1) { if ($currentNumber >= $maxNumber) { break; }
$html = file_get_contents($url);
preg_match_all('/(.+?)<br \/>/i', $html, $match);
if (!$match) { break; }
foreach ($match[1] as $ip) { $ip = trim($ip);
if ($ip) { $ips[] = '(' . $ip . ')'; $currentNumber++; } } }
if (count($ips)) { $insert = $dbh->prepare('INSERT INTO proxy (`value`) VALUES' . implode(',', $ips)); $insert->execute(); }
$res = '当前数量:' . $currentNumber; } else { $result = $dbh->prepare('SELECT * FROM `proxy` ORDER BY `id` DESC LIMIT 1'); $result->execute(); $data = $result->fetch(PDO::FETCH_ASSOC);
if ($data) { $delete = $dbh->prepare('DELETE FROM `proxy` WHERE `id` = ?'); $delete->execute([$data['id']]); }
$res = json_encode($data, true); }
return [ 'isBase64Encoded' => false, 'statusCode' => 200, 'headers' => [ 'Content-Type' => 'text/html' ], 'body' => $res ]; }
?>
|
登陆到腾讯云控制台,进入SCF,点击新建一个函数
点击下一步,然后把上面的PHP代码完整的复制进去然后点击完成。
完成后会跳转到当前创建的函数配置页面,我们需要将函数运行的内存和超时时间调大,通过右上角“编辑”按钮即可修改。
点击上面的触发方式。
- 创建定时任务。
定时任务是为了保障代理IP的一个有效性,这里的触发周期可以根据自己的需求进行更换,不一定需要一分钟一次。也可以选择自定义触发周期设置更精确的时间
- 创建API网关触发器
API网关是为了更加方便的获取到代理IP。不用在去自己写一个方法获取可用IP。
使用方法:访问路径 + ?ip=1
1
| https://service-xx-123456.gz.apigw.tencentcs.com/release/proxy-test?ip=1
|
为什么用66ip?
使用66ip是因为它提供免费的API接口和可用率较高的一个网站,当然如果你有能力的话最好使用付费服务,那样子可用率等方面会更好。