【问题标题】:How to upload tar.gz and jar files as GitHub assets using python requests?如何使用 python 请求将 tar.gz 和 jar 文件作为 GitHub 资产上传?
【发布时间】:2018-05-15 01:30:47
【问题描述】:

在某个目录中,我有一个 .tar.gz 和一个 .jar 工件。我想使用请求上传这些资产以进行发布。不幸的是,我无法让它工作。

假设这个 .tar.gz 文件被称为 peaches.tar.gz 这是我尝试做的:

headers = {'Content-Type': 'application/gzip'}
myAuth = {'MyGithubName', 'myToken'}
requests.post('https://api.github.com/repos/MyGithubName/MyRepo/releases/SomeIDNumber/assets?name=peaches.tar.gz, auth= myAuth, headers= headers, data= open('peaches.tar.gz', 'rb'))

【问题讨论】:

    标签: python github python-requests github-api


    【解决方案1】:

    Github documentation,要上传资产,您需要upload_url

    POST https://<upload_url>/repos/:owner/:repo/releases/:id/assets?name=foo.zip
    

    您需要从get release API 中提取此网址(列出版本、获取单个版本或获取最新版本)。你可以找到here

    注意:这将返回与端点对应的 upload_url 键 上传发布资产。这个键是一个超媒体资源。

    上传网址是URI template,例如:

    https://uploads.github.com/repos/bertrandmartel/ustream-dl/releases/8727946/assets{?name,label}
    

    要构建它,您可以使用uritemplate 模块并扩展name 属性(也描述了here

    以下将获取最新版本并将peaches.tar.gz资产上传到它(名称为peaches.tar.gz):

    import requests 
    from uritemplate import URITemplate
    
    repo = 'bertrandmartel/ustream-dl'
    access_token = 'YOUR_ACCESS_TOKEN'
    
    r = requests.get('https://api.github.com/repos/{0}/releases/latest'.format(repo))
    
    upload_url = r.json()["upload_url"]
    
    t = URITemplate(upload_url)
    asset_url = t.expand(name = 'peaches.tar.gz')
    
    headers = {
        'Content-Type': 'application/gzip',
        'Authorization': 'Token {0}'.format(access_token)
    }
    r = requests.post(
        asset_url, 
        headers = headers, 
        data = open('peaches.tar.gz', 'rb').read()
    )
    print(r.status_code)
    print(r.text)
    

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 2014-04-29
      • 2021-09-03
      • 2017-09-02
      • 1970-01-01
      相关资源
      最近更新 更多