Python - Getting url a browser was redirected to

后端 未结 2 774
北荒
北荒 2021-02-06 17:17

I am trying to authenticate an application with the API.
Here\'s How:

  1. I am opening a URL using webbrowser.open.
  2. The user authenticates
相关标签:
2条回答
  • 2021-02-06 17:58

    Try to fire up your own little HTTP server for just one request, let the API redirect to it and wait for the redirected request to appear. This is not a complete example, just the basic concept:

    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()
    

    You probably need to use HTTPS though. In the long run, you might be better off with an existing OAuth implementation.

    0 讨论(0)
  • 2021-02-06 18:16

    After the user authenticates with stack exchange, the SE page will redirect back to your page ("redirect_uri" below). Your code currently redirects to https://stackexchange.com/oauth/login_success ; instead, you should redirect to a page you control.

    1. Open a new window at https://stackexchange.com/oauth/dialog, with these query string parameters
      • client_id
      • scope
      • redirect_uri
      • state - optional
    2. The user approves your app
    3. The user is redirected to redirect_uri, with these parameters in the hash
      • access_token
      • expires - optional, only if scope doesn't contain no_expiry

    source: https://api.stackexchange.com/docs/authentication

    0 讨论(0)
提交回复
热议问题