如何用PHP获取GitHub指定目录下的子目录列表,用于比特币Core版本校验
最优实现方案
你不需要爬取GitHub网页解析HTML,直接调用GitHub官方公开的REST API即可,这是合规且几乎不会被拦截的方案。
核心逻辑
GitHub提供了仓库目录内容查询接口,返回JSON格式数据,其中type为dir的条目就是你需要的验证者用户名子目录,不需要额外解析HTML。
PHP代码实现
GitHub API要求所有请求必须携带User-Agent头,无token的情况下单IP每小时有60次请求配额,完全满足普通校验场景的需求:
<?php $targetVersion = '22.0'; $apiEndpoint = "https://api.github.com/repos/bitcoin-core/guix.sigs/contents/{$targetVersion}"; $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $apiEndpoint, CURLOPT_RETURNTRANSFER => true, // 替换为你自己的项目标识即可,GitHub API强制要求此字段 CURLOPT_USERAGENT => 'BitcoinCoreVerifyScript/1.0', CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2, ]); $resp = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode !== 200) { die("接口请求失败,状态码:{$httpCode}"); } $dirContent = json_decode($resp, true); $verifierList = []; foreach ($dirContent as $item) { if ($item['type'] === 'dir') { $verifierList[] = $item['name']; } } // 输出预期格式 echo var_export($verifierList, true) . ';';
高频使用优化
如果你的请求频率超过每小时60次,可以申请GitHub个人访问令牌(PAT),在请求头中携带Authorization: token 你的令牌,请求配额会提升至每小时5000次。也可以本地添加缓存逻辑,将获取到的验证者列表缓存1~2小时,进一步降低接口请求频率。
关于官方验证者列表的说明
guix.sigs仓库是比特币官方维护的签名聚合仓库,所有合规验证者的签名都会提交到对应版本的子目录下,通过API读取目录列表就是官方默认的获取方式,没有单独的列表接口并非刻意提高自动化门槛,这种基于Git的结构本身也更方便所有人回溯校验提交记录的合法性。
内容的提问来源于stack exchange,提问作者user16508174
相关产品推荐
相关产品推荐

