python - 有人可以给出一个在 github 中上传发布 Assets 的 python 请求示例吗?

标签 python github github-api

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'))

这是给了我

>>> r.text
u'{"message":"Not Found","documentation_url":"https://developer.github.com/enterprise/2.4/v3"}'

我哪里错了?

最佳答案

因此,我会以建议作为开头,如果您使用库,它就像这样简单:

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)

接下来,如果你read the documentation ,您会注意到 GitHub 需要具有真实 SNI(服务器名称指示)的客户端,因此根据您的 Python 版本,您可能还必须安装 pyOpenSSLpyasn1,以及来自 PyPI 的 ndg-httpsclient

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

https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets?name=foo.sh

所以您将把它作为 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(原始示例中的库)会为您处理所有这一切。

关于python - 有人可以给出一个在 github 中上传发布 Assets 的 python 请求示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38153418/

相关文章:

git - 如何查看git存储库中已经存在的行尾类型?

python-3.x - Github API 生成的带注释的标签未显示在 git describe 中

python - 导入和提供可选功能的 Python 良好做法是什么?

具有未定义嵌套列表深度的嵌套列表的Python注释类型

git - 切换分支并在 Git 中保留当前分支更改

github - Github 用户 ID 的数据类型

curl - 获取所有公共(public)用户贡献 aka "calendar data"(github api v3)

python - 使用 easy_install 在 Cocoa 应用程序中捆绑 python 工具

python - 反转/反转字典映射

git - IntelliJ IDEA GitHub 集成创建存储库,但尝试推送时出现“"couldn' t 授权”错误