python - 通过 API 下载 Github 版本

标签 python github python-requests github-api

我正在尝试在我公司的企业 github 服务器上下载存储库的版本。我有带有 OAuth token 的正确授权 header ,并且能够获取发布端点的响应。这个特定的存储库包含源代码的 zip 和 tarball 以及已编译的可执行文件。我正在尝试下载构建的可执行文件。发布请求的响应如下所示,其中 assets 键中的 browser_download_url 键值得关注。

{
    "url": "***/releases/1491",
    "assets_url": "***/releases/1491/assets",
    "upload_url": "***/releases/1491/assets{?name,label}",
    "html_url": "***/releases/tag/1.0.6",
    "id": 1491,
    "tag_name": "1.0.6",
    "target_commitish": "release-1.0.6",
    "name": "1.0.6",
    "draft": false,
    "prerelease": true,
    "created_at": "2017-10-03T15:51:25Z",
    "published_at": "2017-10-10T16:54:16Z",
    "assets": [
        {
            "url": "***/releases/assets/53",
            "id": 53,
            "name": "<program>.exe",
            "label": null,
            "content_type": "application/x-msdownload",
            "state": "uploaded",
            "size": 36023208,
            "download_count": 10,
            "created_at": "2017-10-10T17:40:32Z",
            "updated_at": "2017-10-10T17:40:32Z",
            "browser_download_url": "***/1.0.6/<program>.exe"
        }
    ],
    "tarball_url": "***/tarball/1.0.6",
    "zipball_url": "***/zipball/1.0.6",
    "body": "<description of release>"
}

但是,当我尝试请求 browser_download_url 时,我会在响应内容中获取登录页面的 html,因为它正在寻找进一步的身份验证。

response = session.get(release_endpoint_response.json()['assets'][0]['browser_download_url'], headers={'Authorization': 'token <personal_access_token>'}) 

我的问题是,有什么方法可以从此链接下载,而无需显式登录并简单地使用 token 和 header ?
解决这个问题的最佳方法是什么? 是否有任何包装器或库可以帮助我以不同的方式实现这一目标? 非常感谢!

编辑:此外,应该注意的是,当请求 tarball 和 zip url 时,压缩的源代码文件可以正常下载。这里的问题是我有一个不合适的构建环境,所以我想下载可执行文件。有趣的是,我没有像构建 exe 那样遇到 zip 的身份验证问题。

最佳答案

我相信已经找到了解决方案here 。本质上,我需要获取所需版本的 Assets ID,然后将 Accept header 包含为 application/octet-stream。只需在您想要的任何版本的发布端点中获取 Assets 的 id,设置 header ,然后点击此端点:/repos/:owner/:repo/releases/assets/:id

编辑:这对我来说很有效。被标记为答案 =)

关于python - 通过 API 下载 Github 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46994563/

相关文章:

python - 有没有办法在 Pandas 组中进行累积 np.bitwise_or ?

python - groupby 和过滤 Pandas

javascript - 如何使用 Github API 从存储库中的目录获取文件名

python - 成功创建 super 用户后无法登录 Heroku 管理面板

python - 如何抓取 Flipkart 评论中的评论数据 阅读更多内容

python-3.x - 断言包装函数

python - 帮助解决 python urllib2 导入错误

git - 移动 git commit 到新分支

python - Python 3.5.1 中requests模块如何获取URL的IP地址

django - 为什么Python请求库无法得到响应?