【问题标题】:Github create or update file fails with 422 invalid Base64 encoding for MIME 64 encodingGithub 创建或更新文件失败,MIME 64 编码的 422 无效 Base64 编码
【发布时间】:2020-04-05 08:23:02
【问题描述】:

https://developer.github.com/enterprise/2.18/v3/repos/contents/#create-or-update-a-file

我正在尝试使用 github-api 库调用上述 API。 API 失败,出现 422,Base 64 编码无效。

该库使用MIME 类型编码。如果我改成Base64.encodeToString(content),github api就会接受。

我的问题是:

  1. github 不接受 MIME 类型 64 编码吗?
  2. 我需要添加某种标题来说明它不是 plain 64 而是 MIME 类型(分成 76 个字符的块)?

【问题讨论】:

    标签: github mime-types github-api mime


    【解决方案1】:

    可以链接到github-api/github-api issue 638:

    当我们调用 org/kohsuke/github/GHContentBuilder.java#commit() 时,content 长度 > 57

    API 失败,出现 422,Base 64 编码无效

    如果我们有一个长度为 58 的内容 1234567890123456789012345678901234567890123456789012345678

    我可以使用Base64.getEncoder().encodeToString()在本地解决这个问题

    然而,这与recent change 相关联。

    请注意,“GitHub Rest API V3 'Other Authentication Methods'”包括:

    API 支持 RFC2617 中定义的基本身份验证,但有一些细微差别。

    主要区别在于 RFC 要求使用 401 Unauthorized 响应来回答未经身份验证的请求。
    在许多地方,这会泄露用户数据的存在。相反,GitHub API 以 404 Not Found 响应。
    这可能会导致假定 401 Unauthorized 响应的 HTTP 库出现问题。解决方案是手动制作 Authorization 标头。

    因此,github-api/github-api 可能不支持 MIME 编码,因为这些 RFC2617 要求 which are not followed


    Liam Newman 来自CloudBees comments

    您链接的更改(#631“删除对 apache commons-codec 的依赖”)尚未在版本中发布 - 如果您使用的是 v1.101,则没有此更改。

    我很确定我专门使用了 MIME 编码,因为非 MIME 会产生错误。此外,如果您查看从 GitHub 返回的内容,它是 MIME 编码的。

    见“Decoding base64 while using GitHub API to Download a File

    【讨论】:

    • 是的,我自己提出了这个问题 :) 我理解这种行为。我很好奇为什么 Base64 可以但 MIME Base64 不行
    • @Hexy 我总是查看用户名以检查我是否没有引用 OP 提出的问题...但我没有仔细检查与该帐户关联的图片!
    • @Hexy 也许 Base64 的 RFC2045-MIME 变体不受完全支持,如stackoverflow.com/a/27951845/6309中所述
    • 是的,可能是这样。到时候我会直接联系 Github。
    猜你喜欢
    • 2018-07-25
    • 2011-04-03
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2015-01-31
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多