python - 如何从 python 中的私有(private)存储库下载 GitHub 发布 Assets ?

标签 python python-3.x github github-api pygithub

我正在使用 pygithub我得到了我想要下载的适当 Assets ,但我无法弄清楚如何实际获取它们,因为它们位于私有(private)存储库中。我发现了类似的问题herehere但我正在寻找 Python (3.7) 解决方案。

这是我用来获取我想要的 Assets 的 Assets 信息的代码:

from github import Github
g = Github('username', 'password')
asset = g.get_repo('user/repo').get_latest_release().get_assets()[0]
url = asset.browser_download_url

现在,我可以验证url通过在我的浏览器(已经登录到 GitHub)中访问它是正确的,并且立即开始下载正确的文件。自 pygithub似乎没有 Assets 的下载选项,我一直在尝试使用 requests实现相同的目标:

import requests
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
sess = requests.Session()
sess.auth = 'username', 'password'
response = sess.get(url, headers={'user-agent': user_agent})

此时response总是 <Response [404]> .因为我确定 URL 在我的浏览器中工作正常,所以我猜我在尝试下载文件之前遗漏了一些关于使用 GitHub 进行身份验证的内容。

任何帮助将不胜感激(即使它需要安装其他包)

最佳答案

我最终通过首先从 GitHub 登录页面获取“真实性 token ”然后发布来解决了这个问题:

import requests
from pathlib import Path
from github import Github
from bs4 import BeautifulSoup as bs

auth = 'username', 'password'
asset = Github(*auth).get_repo('user/repo').get_latest_release().get_assets()[0]
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
headers = {'user-agent': user_agent}
login_url = 'https://github.com/session'
session = requests.Session()
response = session.get(login_url, headers=headers)
authenticity_token = bs(response.text, 'lxml').find('input', attrs={'name': 'authenticity_token'})['value']
session.post(
    login_url,
    headers=headers,
    data=dict(
        commit='Sign in',
        utf8='%E2%9C%93',
        login=auth[0],
        password=auth[1],
        authenticity_token=authenticity_token
    )
)
# Now I'm logged in properly, I can download the private repository assets
response = session.get(asset.browser_download_url, headers=headers)
save_to = Path.home() / 'Downloads' / asset.name
save_to.write_bytes(response.content)

关于python - 如何从 python 中的私有(private)存储库下载 GitHub 发布 Assets ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58731187/

相关文章:

git - git 设置时出现问题

python - Tensorflow 变量未使用图间复制进行初始化

windows - 可以在 32 位中使用 ctypes 访问一些 kernel32 函数,但不能在 64 位中访问

git - Yeoman 生成器 - 创建远程 github 存储库

python - gensim Doc2Vec 单词不在词汇表中

python - 当尝试在任何地方定义全局变量时,我得到 'invalid syntax'

css - 在不同元素之间共享样式文件夹的最佳方式是什么?

python - 如何在Python中使用XPath选择兄弟节点的子节点?

python - Django 搜索多个过滤器

python - 如何检查 SciPy CSR 矩阵是否为空(即仅包含零)?