gpt4 book ai didi

python 请求库到 github api - 对相同 url 的响应不一致

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:02 25 4
gpt4 key购买 nike

感谢任何帮助 - 第一次一起使用 Django 和 Github API。我有一个简单的 url,它是从 repo 的 pull 请求的 api 请求中获得的。我正在遍历它们以找到我要检查的 diff_url 属性。

在 chrome 浏览器中,它工作正常,我正在显示 pull 代码差异的文本输出。查看网络流量,网络调用向另一个包含 token 的 URL 提供 302。

在隐身 chrome 和 curl 中,我收到 404 错误。

我正在使用 github3.py 获取 pull 模型,并请求(使用简单例份验证)尝试从 pull 模型属性访问 diff_url。

我想知道为什么浏览器可以工作,而代码和 curl 都不能工作。

这是 Python 代码:

def getAllPullRequestsForRepo(self, repo_name):
''' Return pull request and tag object for repository
Github: Every pull request is an issue, but not every issue is a pull request
For each pull request = issue - get associated labels
'''
# TODO look at repo array to get repository (save as object)
repoOwner = self.org_name + '/' + repo_name
github = Github(self.username, self.password)
repository = github.get_repo(repoOwner)
pullDict = []
pulls = repository.get_pulls('all')
pullDatum = {}

for pull in pulls:
assigneeName = ''
assigneeLogin = ''
if pull.assignee:
assigneeName = pull.assignee.name
assigneeLogin = pull.assignee.login

pullDatum = {
'id': pull.id,
'assignee': assigneeName,
'assignee_login': assigneeLogin,
'title': pull.title,
'body': pull.body,
'state': pull.state,
'created': pull.created_at,
'diff_url': pull.diff_url,
'diff_content': '',
'issues_url': pull.issue_url,
'issues_content': '',
'commits_url': pull.commits_url,
'commits_content': '',
}

# Get the code differences and load into diff data
diff_url_data = requests.get(pull.diff_url, auth=(self.username, self.password))

最佳答案

我联系了 github api,很高兴他们得到了很好的支持,并很快回复了这个问题的很好解释的解决方案。谢谢伊万!这是他们的回复,我希望它能帮助其他人。

感谢您的联系。因此,失败的原因是 diff_url 指向 github.com(网站)上的资源,而不是 api.github.com(API)上的资源。请参阅此处的文档:

https://developer.github.com/v3/pulls/#get-a-single-pull-request

“diff_url”:“https://github.com/octocat/Hello-World/pull/1347.diff”,

因为 API 不提供资源,所以您不能使用 API ( https://developer.github.com/v3/#authentication) 支持的身份验证机制。

网站和 API 不共享那样的身份验证机制——网站使用 session ,而 API 通过基本身份验证和 token 等使用无状态身份验证。

那么,您可以执行以下操作。您想获取 pull 请求的差异,对吗?您也可以通过 API 获取它,如此处所述:

https://developer.github.com/v3/pulls/#custom-media-types

换句话说,如果您在通过 API 获取 pull 请求时在接受 header 中包含特殊媒体类型——您将取回该 pull 请求的原始差异。

这是一个 curl 示例:

curl https://api.github.com/repos/rails/rails/pulls/30744 -H "接受:application/vnd.github.v3.diff"

希望这对您有所帮助。

最好的,伊万

关于python 请求库到 github api - 对相同 url 的响应不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46566404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com