由于懂的都懂的原因,国内访问 Github API 不是很稳定,最近写的小程序希望在客户端通过 Github API 拉取一些信息,然后就有了这个方法。
本文采用华为云函数工作流实现(免费的不用白不用),其他云函数理论上也可以实现。
CF Workers 我测试的时候会反向加速,对网络环境比较自信的话也可以尝试使用。
注册账号,开通函数工作流,这里就不多说了,相信大家都会搞。
新建一个函数
这里选事件函数,测试的时候 HTTP 函数依赖管理有点问题。
环境这里我选个熟悉的 python,如果你更熟悉其他语言写 proxy 也可以选其他的。
在编辑器里写好代码后记得 Ctrl+S 保存或者点下部署,把代码更上去。
这里提供一个简单粗暴的 python 透明代理写法
import os
import json
import base64
import requests
def handler(event, context):
header = {k:v for k, v in event["headers"].items() if k.lower() not in ["host"]}
resp = requests.request(event["httpMethod"], "https://api.github.com"+event["path"], headers=header, data=event["body"], stream=True)
defaultResponse = {
'statusCode': resp.status_code,
'isBase64Encoded': True,
'headers': dict(resp.headers),
'body': base64.b64encode(resp.raw.read()).decode(),
}
return json.dumps(defaultResponse)
为函数配置 API 网关服务,首次使用需要先创建分组,再点下创建分组旁边的刷新。
创建分组比较简单,起个名字,之后回去创建触发器
之后进入 API 管理,编辑刚刚配置好的 API
下一步进入第二步,将请求路径改为根路径 /,完成并发布
如果不改这里的请求路径就需要在代码中进行相应处理,可以根据个人习惯进行配置
之后就可以用 API 分组里面的测试域名随便折腾了
测试域名每天 1000 次基本上是够用了,如果不够用的话多搞几个分组和云函数也是一种可行方案,由于里面是很灵活的代码。有很多能够做到负载均衡的办法,这里就不展开了。
本文只是做个简单的演示,正式使用时安全认证最好开一下,避免被别人搞。
只要思想不滑坡,办法总比困难多,除此之外,函数工作流还可以实现许多有趣的功能,这里就留给大家自由挥发了~