代码之家  ›  专栏  ›  技术社区  ›  Neil P.

创建文件的GitHub API

  •  12
  • Neil P.  · 技术社区  · 10 年前

    所以我正在努力熟悉GitHub API。我使用cURL命令来实现它们的一些基本功能。我可以获得基本授权&正确创建存储库。目前,我正在尝试使用他们的API&我面临“message”:“Not Found”错误作为响应。

    他们的 documentation 建议如下:

    PUT /repos/:owner/:repo/contents/:path
    

    我将此作为cURL等效项:

    curl -H 'Authorization: <token>' -d '{"path": "test.txt", "message": "Initial Commit", "committer": {"name": "<name>", "email": "<email>"}, "content": "bXkgbmV3IGZpbGUgY29udGVudHM=", "note":"Test Commit"}' https://api.github.com/repos/InViN-test/test_repo1/contents/test.txt
    

    我认为问题出在我最后使用的API URL上,但我似乎无法弄清楚URL应该是什么样子。

    这是我用来创建存储库的方法:

    curl -i -H 'Authorization: <token>' -d '{"name": "test_repo1", "message": "Initial Commit", "committer": {"name": "<name>", "email": "<email>"}, "content": "bXkgbmV3IGZpbGUgY29udGVudHM=", "note":"Test Commit"}' https://api.github.com/user/repos
    

    我使用的存储库创建URL如下:user/repos作为语法。 同样,我也尝试过使用user/repos/repo,但没有成功。

    有人能解释一下吗?

    我已经完成了各种StackOverflow问题&许多人看起来很相似,但没有一个真正提供了一个例子,所以我可以找出错误所在。

    编辑:感谢TimWolla的回答。

    使用GitHub API在存储库中创建文件的工作命令语法:

    curl -i -X PUT -H 'Authorization: token <token_string>' -d '{"path": "<filename.extension>", "message": "<Commit Message>", "committer": {"name": "<Name>", "email": "<E-Mail>"}, "content": "<Base64 Encoded>", "branch": "master"}' https://api.github.com/repos/<owner>/<repository>/contents/<filename.extension>

    我的例子:

    curl -i -X PUT -H 'Authorization: token f94ce61613d5613a23770b324521b63d202d5645' -d '{"path": "test4.txt", "message": "Initial Commit", "committer": {"name": "Neil", "email": "neil@abc.com"}, "content": "bXkgbmV3IGZpbGUgY29udGVudHM=", "branch": "master"}' https://api.github.com/repos/InViN-test/test_repo1/contents/test4.txt

    1 回复  |  直到 10 年前
        1
  •  8
  •   TimWolla    10 年前

    使用时 curl 您需要指定正确的HTTP谓词( PUT 在这种情况下)使用 -X 选项:

    curl -X PUT -H 'Authorization: …' yadayada
    

    同样使用您的示例有效负载,显示错误500,这个缩短的有效负载运行良好:

    {"message": "Initial Commit","content": "bXkgbmV3IGZpbGUgY29udGVudHM="}
    

    不过,我不知道服务器错误的实际原因。