我收到的内容无效Base64'使用API向github发布某个非常简单的内容时出错。内容是
unit = $("<li class='s clearfix'></li>");
我正在使用Base64.urlsafe_encode64来编码内容。
content = 'unit = $("<li class=\'s clearfix\'></li>")';
url = "https://api.github.com/repos/#{github_user}/#{github_repo}/contents/#{path}"
RestClient.put(url,
{
message: "my message",
content: Base64.urlsafe_encode64(content),
encoding:"base64" }.to_json,
{
params:{access_token:access_token
},accept:'json'}){ |response, request, result|
puts response.code
puts response
}
我得到了这个回应:
422
{"message":"content is not valid Base64",
"documentation_url":"https://developer.github.com/v3/repos/contents/"}
我不明白这对github来说是不是有效的base64。并且所有提交的数据都不会发生。
content='unit = $("<li class=\'s clearfix\'></li>")'
Base64.urlsafe_decode64(Base64.urlsafe_encode64(content))==content
=> true
我做错了什么?
答案 0 :(得分:3)
原则上内容必须使用符合RFC 4648的 Base64.strict_encode 进行编码。我在github上找到了解决方案:https://github.com/octokit/octokit.rb/blob/5323df945ecfd524556888e35d042a96c9055a1c/lib/octokit/client/contents.rb#L76
答案 1 :(得分:1)
当我考虑Content API时,我不会看到字段&#39;编码&#39;当你输入信息时。
我只在答案中看到它(如in this one)。
如果您看到go-github项目(在Go中,但想法相同),您会看到用于设置消息的结构:RepositoryContentFileOptions
:
// RepositoryContentFileOptions specifies optional parameters for CreateFile, UpdateFile, and DeleteFile.
type RepositoryContentFileOptions struct {
Message *string `json:"message,omitempty"`
Content []byte `json:"content,omitempty"`
SHA *string `json:"sha,omitempty"`
Branch *string `json:"branch,omitempty"`
Author *CommitAuthor `json:"author,omitempty"`
Committer *CommitAuthor `json:"committer,omitempty"`
}
message := "m"
content := []byte("c")
repositoryContentsOptions := &RepositoryContentFileOptions{
Message: &message,
Content: content,
Committer: &CommitAuthor{Name: String("n"), Email: String("e")},
}
在您的情况下(红宝石),content
应该足够了。