有关ip数据存储的全程回顾

  1. 存储
  2. 请求
    1. 请求ip
    2. 请求读取
    3. 请求存储
  3. 实现流程
  4. 一些问题

这个东西思路简单,但实现也是耗费了一整天时间,毕竟你不知道哪里问题会突然跳出来,做完眼都花了。

我想从大概三个方面总结一下:存储、请求和实现流程。先说思路,再说过程。

存储

存储一直是个很麻烦的事情,先前照片存储就折腾了很久,又是图床又是加速,最终效果也不好(当然,你既然想要啥都免费了,就不能又要又要的)。

而这次不同先前,不光要存储和读取,还要能修改写入,不然得到了ip也没有用,所以静态存储已经不能满足我们的需要了。

我始终没有找到免费的国内云端数据库,所以用的还是github——哎?等等,不是静态存储已经不能……

没错,我们要用github存储和读取,并在网页客户端频繁更改。

新建一个仓库,放入一个你要存储的空文件,在个人页面生成一个拥有修改此文件权限的token。(我英语不好,之前以为token全局生效,为了避免其他仓库数据泄露风险选择了用另一个邮箱注册了新号,实则不需要)

接下来就是在网页端实现对ip的获取和存储。

请求

以下是简化的请求格式,仅供参考

请求ip

    const ipAddresses = '';//接入获取ip的api
    try {
            const response = await fetch(ipAddress);
            const data = await response.json();
            return data.ip; 
        } 
   

在直接存储之前,我们还有读取文件的过程,我们还需要读取已有的数据并检验此ip是否已经被存储了,我们不重复存储数据才能实现进站计数效果,我认为这个效果要比之前那个刷新一次就记一次数的插件要好。

请求读取

    const response = await fetch('https://raw.githubusercontent.com/用户名/库名/<文件> ');
   //原生数据地址

‘这里为啥不用cdn加速了?’
因为我发现cdn加速获取不到最新数据,提交后会覆盖原有数据,使数据不准确
‘那这个get不会很慢吗?’
而且不挂梯子很容易失败,这就没有办法了,没有找到免费的国内数据库

请求存储

    const updateResponse = await fetch('https://api.github.com/repos/用户名/库名/<文件> ', {
        method: 'PUT',//put请求常用于文件更改或替换
        headers: {
            'Authorization': `<你生成的token> `,//当然这里是有很大的泄露风险的,或者说几乎是赤裸的,所以不要用作重要的数据,并且这里最好先加密再解密以绕过扫描,或者分成两段字符串,我猜的,感兴趣可以试试
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            message: '',//提交注释信息
            content: //编码后的存储数据 
            sha: //文件sha值,确保一致
        })
    });

https://api.github.com/repos/用户名/库名/<文件>是github提供的api,更多详见官方文档

其他逻辑不再详述,自此我们假设脚本已能成功获取存储ip了。

实现流程

这有什么可说的,不就

把获取和存储ip的脚本放到网页上

就行了吗?

是这样的,都多余了。

不过有几个值得记下来的地方。

网页在解析到<script>时就会自动开始编译和执行脚本,但是我们的js脚本请求很慢,尤其还有个get原生国外网址,会导致页面加载不出来,解决的办法就是把脚本放到页面渲染完毕之后再执行。

所幸刚好有这样便捷的方法

<script defer></script>

顺便,把脚本拿到网页md文件的外面

<script src="你的/脚本/路径/目标脚本.js" defer></script>

如果放在模板文件里,就能让所有页面搭载上这个脚本了。

一些问题

文件上传时遇到了 - Push cannot contain secrets

这是github的私密扫描,不允许上传token等敏感信息,点击它返回的链接选择我愿意泄密就可以了,当然确保确实不会泄露重要信息

同一ip连续的get全都是404因而被github禁止访问

get加上token允许访问的次数会多一些
我遇到这个问题是因为调试代码,一直失败,没办法的,调试好了就没有了。

脚本加载得很慢,不挂梯子成功率很低

我在想。

怎么调试代码

浏览器的控制台可以查看日志
根据返回的状态码判断问题

生成的token到期

重新生成token并调整token使用期限
如果是预期意外的过期,有可能是把token上传到了公开库,寻求方法绕过

到此为止吧

追加

现在会有时候返回422,如果一直返回倒也不奇怪,但是有时候返回,有时候又正常,这我就不明白了,这跟浏览器读取我的请求有关系吧。

如果返回429,说明限制了访问频率限制。18号追加


此方悬停
相册 小说 Ai
/*音乐播放器插件*/ /*
*/