Python - 将浏览器的url重定向到

时间:2013-03-19 06:30:56

标签: python redirect browser urllib2

我正在尝试使用API​​验证应用程序 这是如何:

  1. 我正在使用webbrowser.open打开网址。
  2. 用户对应用程序进行身份验证,并重定向到另一个URL,即 带有以此URL编码的参数的https://stackexchange.com/oauth/login_success  示例重定向网址为:
    .../login_success#access_token=xyz&expires=00000
  3. 我的当前代码:

    auth_url = 'https://stackexchange.com/oauth/dialog'
    def authenticate():
        scope = "write_access,private_info,read_inbox"
        url = make_url(auth_url,client_id=132,
                       scope=scope,response_type='code',
                       redirect_uri='https://stackexchange.com/oauth/login_success')
        webbrowser.open(url)
    

    如何在用户验证自己后获取重定向URL(用户访问的URL)???

2 个答案:

答案 0 :(得分:2)

尝试仅为一个请求启动您自己的小型HTTP服务器,让API重定向到它并等待重定向的请求出现。这不是一个完整的例子,只是基本概念:

import BaseHTTPServer
auth_url = 'https://stackexchange.com/oauth/dialog'

# replace with your own http handlers
def wait_for_request(server_class=BaseHTTPServer.HTTPServer,
                     handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    return httpd.handle_request()

def authenticate():
    scope = "write_access,private_info,read_inbox"
    url = make_url(auth_url,client_id=132,
                   scope=scope,response_type='code',
                   redirect_uri='http://localhost:8000/login_success')
    webbrowser.open(url)
    wait_for_request()

您可能需要使用HTTPS。从长远来看,使用现有的OAuth实现可能会更好。

答案 1 :(得分:-1)

用户使用堆栈交换进行身份验证后,SE页面将重定向回您的页面(下面的“redirect_uri”)。您的代码目前重定向到https://stackexchange.com/oauth/login_success;相反,您应该重定向到您控制的页面。

  1. 使用这些查询字符串参数在https://stackexchange.com/oauth/dialog打开一个新窗口
    • 的client_id
    • 范围
    • REDIRECT_URI
    • 州 - 可选
  2. 用户批准您的应用
  3. 用户被重定向到redirect_uri,这些参数在哈希中
    • 的access_token
    • expires - 可选,仅当范围不包含no_expiry
  4. 来源:https://api.stackexchange.com/docs/authentication