【问题标题】:Load a URL in the browser from Python从 Python 在浏览器中加载 URL
【发布时间】:2017-09-03 21:23:02
【问题描述】:

我正在编写一个授权访问 ETrade API 的类。 (理论上,这实际上可以与任何使用 OAuth 1.0 的 API 一起使用。)完整的代码可以在 in my GitHub 找到。我的问题的相关代码如下:

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?

【问题讨论】:

    标签: python simplehttpserver


    【解决方案1】:

    您可以使用import select.poll() 来检查套接字对象是否处于活动状态。

    然后您可以使用 webbrowser 打开 URL: https://docs.python.org/2/library/webbrowser.html#module-webbrowser

    webbrowser.open_new_tab(self.get_authorization_url())
    

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 2014-04-02
      • 2022-12-05
      • 2022-11-15
      • 1970-01-01
      相关资源
      最近更新 更多