You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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))
});

部署后的错误结果截图

401错误截图


解决方案排查点

  • 检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:43:16