有人能给出一个在github中上传发布资产的python请求示例吗?

2024-10-03 11:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

url = 'https://github.abc.defcom/api/v3/repos/abc/def/releases/401/assets?name=foo.sh'
r = requests.post(url, headers={'Content-Type':'application/binary'}, data=open('sometext.txt','r'), auth=('user','password'))

这给了我

^{pr2}$

我哪里出错了?在


Tags: namehttpsgithubapiurlfoodefsh
2条回答

因此,我将在这篇文章的开头提出一个建议,即如果你使用图书馆,那么它很容易做到:

from github3 import GitHubEnterprise

gh = GitHubEnterprise(token=my_token)
repository = gh.repository('abc', 'def')
release = repository.release(id=401)
asset = release.upload_asset(content_type='application/binary', name='foo.sh', asset=open('sometext.txt', 'rb'))

考虑到这一点,我还将在前面加上“application/binary”不是真正的媒体类型(请参见:https://www.iana.org/assignments/media-types/media-types.xhtml

注意,{2}你的客户端可能需要安装

我不确定企业实例的URL是什么样子,但是对于public GitHub,它看起来像:

^{pr2}$

因此,您将得到url,并且您需要您的身份验证凭证(在您的情况下,您似乎希望使用基本身份验证)。然后你需要一个有效的媒体类型,例如

headers = {'Content-Type': 'text/plain'}

你的电话看起来非常正确:

requests.post(url, headers=headers, data=open('file.txt', 'rb'), auth=(username, password))

要获取正确的url,应执行以下操作:

release = requests.get(release_url, auth=(username, password))
upload_url = release.json().get('upload_url')

注意这是一个URITemplate。您需要删除模板,或者使用uritemplate.py这样的库来解析它,并使用它为您构建URL。在

最后一个提醒,github3.py(原始示例中的库)会为您处理所有这些问题。在

APIv3上传示例,无任何外部依赖性

用法:

GITHUB_TOKEN=<token> ./create-release username/reponame <tag-name> <path-to-upload>

脚本:

^{pr2}$

任何语言的超集问题:How to release a build artifact asset on GitHub with a script?

相关问题 更多 >