因此,我将在此之前提出建议,如果您使用库,它就像:
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'))
考虑到这一点,我还会在前面加上“应用程序/二进制”不是真正的媒体类型(请参阅:https://www.iana.org/assignments/media-types/media-types.xhtml)
接下来,如果您read the documentation,您会注意到 GitHub 需要具有真实 SNI(服务器名称指示)的客户端,因此根据您的 Python 版本,您可能还需要安装pyOpenSSL、pyasn1 和 ndg-httpsclient 来自 PyPI。
我不确定企业实例的 URL 是什么样的,但对于公共 GitHub,它看起来像:
https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets?name=foo.sh
因此,您将拥有 url,并且您将需要您的身份验证凭据(在您的情况下,您似乎想要使用基本身份验证)。然后你会想要一个 valid 在标题中的媒体类型,例如,
headers = {'Content-Type': 'text/plain'}
而且你的调用看起来几乎完全正确:
requests.post(url, headers=headers, data=open('file.txt', 'rb'), auth=(username, password))
要获得正确的网址,您应该这样做:
release = requests.get(release_url, auth=(username, password))
upload_url = release.json().get('upload_url')
注意这是一个 URITemplate。您需要删除模板或使用 uritemplate.py 之类的库来解析它并使用它为您构建 URL。
最后提醒一下,github3.py(原始示例中的库)会为您处理所有这些。