我正在與Flask合作bakery項目(想法類似於Travis CI,但在Python中完成)。以及爲擁有授權的github用戶的存儲庫添加webhooks的模塊。我不在這裏粘貼完整的示例代碼,這裏是我正在嘗試做的事情的片段。完整的示例可在separate gist。Flask OAuth Github POST請求
問題是Github API GET請求沒有任何問題。但POST 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方法來簡化代碼,使工作?
最大,其實挖後,我做了一個猴子補丁to_header在請求類方法的OAuth2。但之後我發現了其他問題,並不確定它是否是有限的問題和修復鏈。可能我會嘗試切換到你的lib。例如它有HTTP PATCH方法支持。非常感謝您的鏈接,例子和答案。 –
@MikhailKashkin很高興聽到你能夠修復它!如果您決定試用rauth,請隨時通過任何問題向我發送問題。 – maxcountryman