GitHub API本地PUT请求正常,部署到远程服务器后返回401错误求助
问题:GitHub API上传文件本地正常,远程部署返回401未授权
我使用GitHub API向仓库上传文件,本地Postman测试请求正常,但部署到远程服务器后始终返回401状态码。已尝试创建新的token并重部署,问题依旧。查阅GitHub官方REST API故障排查文档后,未找到有效解决方案。
本地可正常运行的Postman请求
curl --location --request PUT 'https://api.github.com/repos/MY_ACCoUNT/JavaAsyncGraphql/contents/player/src/main/resources/example2.md' \ --header 'Authorization: Bearer mytoken' \ --header 'Accept: application/vnd.github+json' \ --header 'Content-Type: application/json' \ --data-raw '{ "message": " tets api file", "content": "LS0tCnRpdGxlOiAiV3JpdGUgYSBoaWdoIENUUiBtZXRhIGRlc2NyaXB0aW9uICYgdGl0bGUiCmRhdGU6ICIyMDIzLTA3LTA4VDIzOjExOjM4Ljg1MVoiCnRodW1iOiAiV3JpdGVfYV9oaWdoX0NUUl9tZXRhX2Rlc2NyaXB0aW9uXyZfdGl0bGUucG5nIgp0YWdzOiBbQ29udGVudCwgU0VPLCBNYXJrZXRpbmcsIE90aGVyc10KLS0tCgojIFdyaXRlIGEgaGlnaCBDVFIgbWV0YSBkZXNjcmlwdGlvbiAmIHRpdGxlCgpbTGlua10oaHR0cHM6Ly90d2l0dGVyLmNvbS9oZXlsb3Zpc2gvc3RhdHVzLzE2MzgxNjQ0MDM2NTU2OTYzODQpCioqRHVlIHRvIG5ldyB0d2l0dGVyIHBvbGljeSB5b3UgbmVlZCB0byBsb2dpbiB0byB2aXN1YWxpemUgdGhlIHRocmVhZCoqCg==" }'
程序代码
var markdown_encode = btoa(markdown); var headers = { 'Authorization': 'Bearer mytoken', 'Accept': 'application/vnd.github+json' } var body = { "message": "adding " + filename, "content": markdown_encode } const url = `${url_base}${repoName}/contents/${pathFile}/${filename}.md`; fetch(url, { method: 'PUT', headers, body: JSON.stringify(body) }) .then(response => response.json()) .then(data => { const sha = data.content.sha; console.log(sha); alert("success ith a sha " + sha); }) .catch(error => { console.log(error); alert(JSON.stringify(error.message)) });
部署后的错误结果截图

解决方案排查点
- 检查token权限:确保token拥有
repo(私有仓库)或public_repo(公有仓库)权限,且未设置IP访问限制。 - 验证远程环境token:确认服务器中配置的token与本地测试的完全一致,无拼写错误、额外空格,若用环境变量存储token,需确认变量已正确加载。
- 补全请求头:本地curl包含
Content-Type: application/json头,代码中未显式设置,建议在headers中添加该字段,避免请求体解析异常。 - 修正base64编码逻辑:
btoa()仅支持ASCII字符,若markdown包含非ASCII内容(如中文)会编码失败,替换为window.btoa(unescape(encodeURIComponent(markdown)))处理全字符集。 - 排查网络代理:远程服务器若使用代理,需确认代理未篡改或丢失Authorization请求头,确保请求能正常直达GitHub API。
- 确认token有效期:新创建的token默认永久有效,若手动设置了过期时间,需检查是否已过期。
内容的提问来源于stack exchange,提问作者Brahian
相关产品推荐
相关产品推荐

