Obtainium 中 GitHub 源的 GHReqPrefix 代理前缀如何配置?
【免费下载链接】ObtainiumGet Android app updates straight from the source.项目地址: https://gitcode.com/GitHub_Trending/ob/Obtainium
Obtainium 通过 GitHub 源抓取 Release 信息时,请求会直接发往api.github.com。如果你的网络环境无法直连 GitHub,可以在 GitHub 源设置中填入GHReqPrefix(代理前缀),让 Obtainium 把 GitHub 请求改道到自建或公共的 GitHub 代理实例。本任务的目标是:在 Obtainium 中正确填入这个前缀,确认它生效并理解它与 GitHub 令牌(PAT)配置的关系。
该设置属于源级别设置(对所有 GitHub 源应用全局生效),不是某个应用的独立选项。字段定义在 GitHub 源实现,界面文案来自 英文翻译文件(英文标签为'sky22333/hubproxy' instance for GitHub requests,中文标签为用于 GitHub 请求的 "sky22333/hubproxy" 实例)。
前缀值的格式要求
填写前先看代码中定义的校验规则(github.dart),它决定了哪些输入能通过表单验证:
- 字段非必填,留空表示不走代理;
- 值不能带协议前缀——一旦能解析出 scheme(例如
https://gh-proxy.com),表单直接报invalidInput。也就是说只填主机部分,如gh-proxy.com; - 代码会用
https://<你填的值>/api.github.com试解析一次 URI,解析失败同样报invalidInput,所以值必须是能拼进 URL 主机位置的内容。
输入框自带提示文本(hint)为gh-proxy.com,可作为格式参考。
在设置页填入前缀
GHReqPrefix与github-creds(GitHub PAT)、checkRepoRename一起,通过sourceConfigSettingFormItems暴露为源级选项。设置页会遍历所有源并渲染这些项(settings.dart):
- 打开 Obtainium 的设置页,找到各源设置项组成的表单(设置页把每个源声明的
sourceConfigSettingFormItems汇总为一个GeneratedForm); - 在标签为
GHReqPrefix(中文界面显示“用于 GitHub 请求的 'sky22333/hubproxy' 实例”)的输入框中填入不带协议的代理主机,例如gh-proxy.com; - 输入合法后表单自动保存,值写入
SettingsProvider(settingsProvider.setSettingString(key, value)),无需额外确认按钮。
如果某处输入被拒,检查是否误带了https://前缀——这是最常见的无效输入。
可选分支:在添加应用页手动覆盖源(override source)时,该源的sourceConfigSettingFormItems也会随应用表单一起显示(add_app.dart),此时填写的前缀会进入该应用的additionalSettings。按 source_provider.dart 中getSourceConfigValues的取值逻辑,应用级非空值优先于全局设置,因此这种填法只影响那一个应用;常规用法仍是在设置页填一次、全局生效。
配置后的实际效果
前缀生效后,代码行为有明确的三处体现,都可在 github.dart 中核对:
- 请求改写:
generalReqPrefetchModifier(L297-L307)把任意 GitHub 请求地址改写为https://<前缀>/<原地址去掉 https:// 后的部分>。例如查某个仓库 Release 的请求https://api.github.com/repos/owner/repo/releases会变为https://gh-proxy.com/api.github.com/repos/owner/repo/releases。仓库搜索、导入 GitHub 用户 Star 列表(githubstars.dart)走的也是同一条sourceRequest链路,同样经过该改写; - 令牌被忽略:
getTokenIfAny(L265-L287)在GHReqPrefix非空时直接把github-creds置为 null。也就是说,填了代理前缀后,你配置的 GitHub PAT 不会对请求生效——走代理时不要指望靠令牌提升配额; - 下载链接还原:API 返回的资产地址(APK、
.tar.gz、.zip的browser_download_url/tarball_url/zipball_url)在拼装结果前会经过undoGHProxyMod(L897-L905)剥离代理前缀,搜索结果中的仓库链接同理。即代理只影响 Obtainium 发出的 GitHub API 查询,最终保存下来的资产与仓库 URL 仍是去掉前缀的原始地址。
验证配置是否生效
- 在设置页保存前缀后,对列表中某个 GitHub 源应用执行更新检查(下拉刷新或手动点检查);
- 判断标准:前缀生效时,该检查的 API 请求会发往
https://<前缀>/api.github.com/...形式的地址,能正常返回版本号并更新latestVersion,说明改道成功;若留空前缀时该应用报网络连接类错误、填前缀后恢复正常,即可确认问题出在直连 GitHub; - 若输入未通过校验(带了协议或主机非法),表单会提示
invalidInput,此时值不会被写入设置,请求仍按直连处理。
限制说明
- 该字段只对 GitHub 源生效,其他源没有对应项;
- 前缀与 PAT 互斥生效:填了前缀,
github-credits(github-creds)令牌即被忽略,二者不要同时依赖; - 仓库改名检测、Release 拉取、搜索与 Star 导入全部经由同一条请求链路,配置一次即可覆盖这些场景,无需逐应用设置。
【免费下载链接】ObtainiumGet Android app updates straight from the source.项目地址: https://gitcode.com/GitHub_Trending/ob/Obtainium
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考