나는 bakery 프로젝트에서 Flask와 함께 작업하고 있습니다 (아이디어는 Travis CI와 비슷하지만 파이썬에서 완료되었습니다). 그리고 권한이 부여 된 github 사용자를 소유 한 저장소에 webhook을 추가하는 모듈 만들기. 여기서 전체 예제 코드를 붙여 넣지는 않겠습니다. 여기에 내가하려는 것을 보여줍니다. 전체 예제는 separate gist입니다.Flask OAuth Github POST 요청
문제는 Github API GET 요청이 문제없이 작동하고 있다는 것입니다. 하지만 POST는 응답 본문에 401
및 {"message":"Bad credentials"}
상태를 반환합니다.
# this method is working
@app.route('/repos')
def repos():
# only logged in user should call it, but I skip it in this example
resp = github.get('/user/repos', data = {'type': 'public'})
# responce status code is ok, and data is returned
print(resp.data) # should print to console
@app.route('/addhook/<path:full_name>')
def repos(full_name):
HOOK_URL = 'http://example.com/hook'
resp = github.post('/repos/%(full_name)s/hooks' % {'full_name': full_name},
data = {
'name':'web',
'active': True,
'events': ['push'],
'config': {
'url': HOOK_URL,
'content_type': 'json'
}
},
format = 'json'
)
# POST request is not working and form request that Github is not understand
print(resp.status, resp.data)
나는 플라스크-의 OAuth를 생성 어떤 헤더를 확인하고이 내용 (실제 값을 생략)로 추가 헤더 행을 추가하는 것이 발견
authorization: 'OAuth realm="https://api.github.com", oauth_body_hash="...", oauth_nonce="...", oauth_timestamp="...", oauth_consumer_key="...", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_token="XXX", oauth_signature="..."
그리고 그 결과로 Github에서이 '이 상태를 반환하고 아마 돈 이것으로 무엇을해야하는지 이해해야한다. 내가 토큰을 복사하고 Github API를 직접 호출하면 예상 된 결과를 얻을 수있는 해결 방법을 찾았습니다.
이$ curl https://api.github.com/repos/xen/league-gothic/hooks?access_token=XXX -X POST --data '{"name":"web","active":true,"events": ["push"],"config": {"url": "http://example.com/hook","content_type": "json"}}'
그래서, 질문은 : 그것은 가능하다 더 나은 보이는하고 코드를 단순화하고 작업을 할 플라스크의 OAuth 방법 POST를 사용하는 여기에 해당하는 컬 호출은 무엇입니까?
최대 : Flask-OAuthlib
그것은 GitHub의 예를 가지고 플라스크-OAuth를위한 또 다른 교체가
. 그러나 다른 문제를 발견하고 그것이 문제와 수정의 유한 체인이라는 것을 확신하지 못했습니다. 아마 당신의 lib로 전환하려고 노력할 것입니다. 예를 들어 HTTP PATCH 메소드를 지원합니다. 귀하의 링크, 예제 및이 답변을 주셔서 대단히 감사합니다. –
@MikhailKashkin이 (가) 당신이 그것을 고칠 수있게되어 기쁩니다! 당신이 맹공격을 시도하기로 결정했다면, 궁금한 점이 있으면 저에게 핑계를 치십시오. – maxcountryman