Decoding base64 while using GitHub API to Download a File

前端 未结 3 1295
执念已碎
执念已碎 2021-01-05 19:28

I am using the GitHub API to download a file from GitHub. I have been able to successfully authenticate as well as get a response from github, and see a base64 encoded stri

相关标签:
3条回答
  • 2021-01-05 20:06

    After much experimenting, I think I nailed down the difference between the working and broken base64 decoding.

    It appears GitHub Base-64 encodes with:

    • UTF-8 charset
    • Base 64 MIME encoder (RFC2045)

    As opposed to a "basic" (RFC4648) Base64 encoder. Several languages seem to default to the basic encoder (including Java, which I was using). When I switched to a MIME encoder, I got the full contents of the file un-garbled. This would explain why switching libraries in some cases fixed the issue.

    I will note the contents field contained newline characters - decoders are supposed to ignore them, but not all do, so if you still get errors, you may need to try removing them.

    The media-type header will do the job better, however in my case I am trying to use the API via a GitHub App - at time of writing, GitHub requires a specific media type be used when doing that, and it returns the JSON response.

    0 讨论(0)
  • 2021-01-05 20:08

    I experimented a bit and found a solution by using a different base64 decoding library as follows:

    var base64 = require('js-base64').Base64;
    var contents = base64.decode(res.content);
    

    I am not sure if it is mandatory to have an encoded string length divisible by 4 (clearly my 15263 character length string is not divisible by 4) but the alternate library decoded the string properly.

    A second solution which I also found to work is specific to how to use the GitHub API. By adding the following to the GitHub API call header, I was also able to get the decoded file contents:

    'accept': 'application/vnd.github.VERSION.raw'
    
    0 讨论(0)
  • 2021-01-05 20:15

    For some reason the Github APIs base64 encoded content doesn't decode properly at all the online base64 decoders I've tried from the front page of google.

    Python works however:

    import base64
    base64.b64decode("ewogICAgInN3YWdnZXIiOiAiM...")
    
    0 讨论(0)
提交回复
热议问题