2016-12-02 105 views
0

我試圖編寫一個程序,該程序在本地運行只有,並與tumblr-API(包括需要OAuth的部分)交互。完全授權使用OAuth的本地應用程序tumblr

我想讓用戶授權我的應用程序,通過打開一個瀏覽器(與蟒蛇webbrowser -package)與tumblr授權頁面在其中。問題在於我需要在我的應用程序中訪問的OAuth進程中的關鍵部分validation-key作爲用戶在授予我的應用程序訪問權後重定向到的URL中的參數傳遞。

當然,我沒有在我的應用程序中訪問webbrowser中的url,所以我的問題是:有沒有什麼辦法可以以另一種方式授予我的應用程序訪問權限,還是隻能運行webserver所以我可以暫時存儲我的驗證密鑰,然後將其傳遞給我的應用程序?也許在存儲在硬盤上的網站上使用iframe嵌入網站?我不是一個webdev,我不知道。

我看過thisthis回答,它們都建議讓回調url(= redirect-url)爲「localhost/whatever」,以便用戶可以複製該URL並將其插回到應用程序中。我想知道是否有另一種解決方案呢?

回答

0

一個選項,加上一個非常髒的,將暫時在本地IP地址上運行服務器,然後讓tumblr認證頁面重定向到該地址。

也許這樣做會與瓶的最簡單的方法:

from flask import Flask, request 

app = Flask(__name__) 
oauth_verifier = [''] # A list so it survives the garbage collector of handle_oauth_verifier(): 
@app.route('/') 
def handle_oauth_verifier(): 
    # Catch oauth_verifier 
    oauth_verifier[0] = request.args.get('oauth_verifier') 
    # Shutdown server: 
    request.environ.get('werkzeug.server.shutdown')() 
    return("<p>Application succesfully authorized. You can close this tab now.</p>") 
# Run server 
app.run() 

僅供參考,以改變tumblr用戶授權頁面的回調URL,該URL必須使用POST傳遞時要求-tokens被提取,而不是獲取授權令牌時! oauth2 library的示例:

resp, content = client.request(request_token_url,"POST", 
    body=urllib.urlencode({"oauth_callback": oauth_verifier_fetch_url})) 

希望這可以幫助某個地方的人。