jjzjj

json - GitHub 无法正确解析 key GoLang API 请求

coder 2024-07-10 原文

因此,以下代码接收创建的公钥,然后将其传递到对象中,然后将对象编码到 json 中。然后将此 json 传递到 http 请求中。 Github 正确解析 json 但返回 ssh key 无效。如果我复制内容并上网粘贴 key ,它就可以正常工作。

我确实编辑了 key 以删除 key 的 user@hostname 部分(我总是这样做,即使我知道这是不安全的)以查看是否是问题所在。

func addKeyToGitHub(token string, comment string, publickey []byte) (*http.Response, error) {
    if token == "" {
        fmt.Println("Please create a token that has 'write:public_key' scope")
        open.Run(githubAPPURL)
        ir := bufio.NewReader(os.Stdin)
        fmt.Print("Enter Token: ")
        token, _ = ir.ReadString('\n')
    }
    k := string(publickey)
    //Removes unwanted host at end of file
    array := strings.Split(k, " ")
    array = array[:len(array)-1]
    k = strings.Join(array, " ")
    fmt.Println(k)
    b := &githubBody{Title: comment, Key: k}
    body, err := json.Marshal(b)
    if err != nil {
        return nil, err
    }
    req, err := http.NewRequest("POST", githubAPIURL+"user/keys", bytes.NewBuffer(body))
    if err != nil {
        return nil, err
    }
    req.Header.Set("Authorization", "token "+token)
    req.Header.Set("Content-Type", "application/json")
    fmt.Println(req)
    client := http.Client{}
    return client.Do(req)
}

输出结果如下

Please create a token that has 'write:public_key' scope
Enter Token: 3310b4ef5d0dbbb8687b992e6f78e02cd34e4d6d
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7zwo/h3mVL2RwOyMeUyGZblLT+nZy9pS6akUMSiOaVkphCdQzoHH/6xbDPiTKNlXC+1JYmQq4DaeglFdVc+FQHp3ZlbhZp6YPemXHnGtKamtQrJHS+HA7zE+F3xPzLQlVTgUdlE4ckU0THRK7WdwXa1sSMO2UNBrn7MGZ4wskU4PO8QFBjFHN0e5SIv2mlF/Oi1FoSRHIEohHAY6JSE8lnxkYFA5XeVkygLFQbZ7dKpVaZg4Y1LvrZUnThmI+e1QxP9ttUj5Ike6wFewBTvTjtPb8hkEHp3GuwjmwN9SKIW4d5bmrJtGxQjYmY4PHhW5DnySBQWBeOnQxhqVQFqlN
&{POST http://github.com/api/v3/user/keys HTTP/1.1 1 1 map[Authorization:[token 3310b4ef5d0dbbb8687b992e6f78e02cd34e4d6d] Content-Type:[application/json]] {{"Key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7zwo/h3mVL2RwOyMeUyGZblLT+nZy9pS6akUMSiOaVkphCdQzoHH/6xbDPiTKNlXC+1JYmQq4DaeglFdVc+FQHp3ZlbhZp6YPemXHnGtKamtQrJHS+HA7zE+F3xPzLQlVTgUdlE4ckU0THRK7WdwXa1sSMO2UNBrn7MGZ4wskU4PO8QFBjFHN0e5SIv2mlF/Oi1FoSRHIEohHAY6JSE8lnxkYFA5XeVkygLFQbZ7dKpVaZg4Y1LvrZUnThmI+e1QxP9ttUj5Ike6wFewBTvTjtPb8hkEHp3GuwjmwN9SKIW4d5bmrJtGxQjYmY4PHhW5DnySBQWBeOnQxhqVQFqlN","Title":"dixon@homedesktop"}} 418 [] false github.com map[] map[] <nil> map[]   <nil> <nil>}
Status 422
Body: {"message":"Validation Failed","documentation_url":"https://developer.github.com/v3/users/keys/#create-a-public-key","errors":[{"resource":"PublicKey","code":"custom","field":"key","message":"key is invalid. It must begin with 'ssh-rsa', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', or 'ecdsa-sha2-nistp521'. Check that you're copying the public half of the key"}]}

我已经删除了 ssh key 和 token ,所以请不要评论我为什么不应该发布它们。

我知道在请求之前所有内容都已授权并正确解析(我测试过错误的 token 和错误的 json 格式都返回不同的错误)但我不知道为什么这不起作用。我试图只构建 json 字符串,将其转换为字节数组,并以相同的方式传递它。

我不知道这是否重要,但我正在通过 VPN 执行此操作(我更改了地址以显示 github 而不是实际地址)。我已经通过 PostMan(不使用 VPN)测试了这个调用并且它有效,所以我知道服务器有这些 api 调用。

最佳答案

您的 OAuth token 没有 write:public_key 范围。 Scopes

关于json - GitHub 无法正确解析 key GoLang API 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666158/

有关json - GitHub 无法正确解析 key GoLang API 请求的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  5. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  6. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  7. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  8. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  9. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  10. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

随机推荐