2017-09-03 78 views
0

我在寫一個授權訪問ETrade API的類。 (理論上,這實際上可以與任何使用OAuth 1.0的API協同工作。)完整的代碼可以在in my GitHub找到。相關的代碼,以我的問題如下:從Python加載瀏覽器中的URL

base_url = 'https://etws.etrade.com' 


class Authorization: 
    def __init__(self): 
     self.oauth_session = requests_oauthlib.OAuth1Session(config.oauth_consumer_key, config.consumer_secret, 
                  callback_uri='oob') 
     self.oauth_url = base_url + "/oauth" 
     print(self.get_authorization_url()) 
     self.run_authorization_server() 

    // ... snip ... 

    def run_authorization_server(self): 
     host_name = 'localhost' 
     host_port = 80 
     with server.HTTPServer((host_name, host_port), AuthenticationCallbackHandler) as httpd: 
      httpd.serve_forever() 

正如你所看到的,我打印的授權URL,用戶必須複製並粘貼到自己的瀏覽器。當我在IntelliJ IDEA中運行時,它在控制檯中被解析,我可以點擊它。此URL將加載用戶登錄其帳戶並授權我的應用訪問的頁面。結果返回作爲對http://localhost的回覆。這就是爲什麼我啓動一個HTTPServer實例來偵聽帶有驗證令牌的請求。

這個過程並不理想。我想以編程方式加載授權URL。複雜的是,我需要確保我的本地服務器在加載授權之前啓動。據我所知,server_forever()阻止當前線程。這表明我需要啓動一個線程來啓動服務器。我該怎麼做呢?更重要的是,我如何知道服務器已啓動,以便加載URL是安全的?最後,我如何在瀏覽器中實際加載URL?

回答