我正在尝试通过REST使用GitHub V3 API来分发回购,但是,我在按照文档(https://developer.github.com/v3/repos/forks/#create-a-fork)发出POST请求时遇到问题。
基本上,我到目前为止:
- 具有OAuth令牌的登录用户
- 对API的POST请求设置(url - https://api.github.com/repos/carmichaelalonso/infiniteflight/forks/) - 我正在使用hurl.it对其进行测试。
- 请求中的标题:一个名称为'Authorization',值为'token ...',另一个名称为'Content-Type',值为'application / json'
- 具有以下JSON的正文:'{“organization”:“shortlisthome”}'(shortlisthome是我试图将回购交易分配给的帐户。
我不打算将此分配给组织,而是打算转移到标准用户帐户,这是我感到困惑的地方。当我运行请求时,我没有收到任何身份验证错误或404错误(我之前有错误,但我错误地输入了错误的值,导致此类错误)。
当我运行此请求时,我得到以下结果(422无法处理的请求):
{
"message": "Validation Failed",
"documentation_url": "---url-to-docs---",
"errors": [
{
"resource": "Fork",
"code": "invalid",
"field": "organization"
}
]
}
我不确定我是否能够将其分配给标准用户,或者我的请求是否出错。如果我能提供更多信息,请告诉我(这里的第一篇文章对会议有点不熟悉)。 谢谢!
答案 0 :(得分:2)
为了使shortlisthome分叉存储库,您需要对其进行身份验证。您尝试分叉is public的存储库,所以您需要做的就是为shortlisthome获取OAuth令牌,然后向您现在制作的那个发出类似的请求。唯一的区别是您不需要提供{"organization": "shortlisthome"}
的JSON正文。
对于它的价值,当您是具有适当权限的组织的成员并且您希望将存储库分叉到该组织时,可选的JSON主体供您使用。除非您经过身份验证,否则无法将存储库分叉到其他人的帐户。
答案 1 :(得分:0)
到目前为止,我已经避免了OAuth2,并且不知道投掷。然而,也许这可以帮助
This post显示了如何使用cURL的-u
用户名标记来完成:
curl -u 'myusername' https://api.github.com/repos/carmichaelalonso/infiniteflight/forks/ -d ''
-d
(或--data
)标志将其转换为POST请求
如果没有该标志,则cURL默认为GET请求,这不是您想要的。
由于数据是此请求的URI的一部分,因此请为必须遵循-d
参数的数据发送空字符串,如下所示:-d ''
。
当然,使用-u将要求您提供密码..
以下是GitHub使用OAuth2 with their API显示的内容:
OAuth2令牌(在标头中发送):
curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com
OAuth2令牌(作为参数发送):
curl https://api.github.com/?access_token=OAUTH-TOKEN
阅读more about OAuth2。请注意,对于非网站的应用程序,可以通过编程方式获取OAuth2令牌。
OAuth2 Key / Secret
curl 'https://api.github.com/users/whatever?client_id=xxxx&client_secret=yyyy'
我怀疑添加-d ''
(或等同于投掷),
加上上面发送OAuth2信息的格式之一可能会让你大部分时间都在这里。
答案 2 :(得分:0)
我使用此命令在github企业版上派生
curl -vX POST https://git.redacted.com/api/v3/repos/<org-to-fork-from>/<repo-to-fork>/forks?access_token=<api-token> -d @gh-fork.json --header "Content-Type: application/json"
gh-fork.json只是
{
"organization": "org-to-fork-to",
"description": "",
"homepage": "https://git.redacted.com",
"private": false
}