Ich weiß, wie es mit einer aktuellen URL z.Wie erhalten Sie die Parameter von einer URL, nachdem Sie sie mit Python-Anfragen ausgeführt haben?
>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
>>> r = requests.get('http://httpbin.org/get', params=payload)
>>> print(r.url)
Aber was ist, wenn, nachdem Sie eine URL besuchen, wie man mit OAuth, zum Beispiel
authorize_url = facebook.get_authorize_url(**params)
requests.get(authorized_url)
Die URL dann an einem wie https://localhost:5000/authorized?code=AQCvF
leiten wird. Wie bekomme ich die code=AQCvF
?
Ich könnte wahrscheinlich so etwas tun, die Adresse des aktuellen Browsers abrufen und dann die URL analysieren, aber gibt es einen saubereren Weg?
komplette Code ist unten:
index.j2
<p><a href="/facebook-login">Login with Facebook</a></p>
routes.py
app.add_route('/facebook-login', LoginHandler('index.j2'))
app.add_route('/authorized', AuthorizedHandler('index.j2'))
handlers.py
from rauth.service import OAuth2Service
import requests
import os
# rauth OAuth 2.0 service wrapper
graph_url = 'https://graph.facebook.com/'
facebook = OAuth2Service(name='facebook',
authorize_url='https://www.facebook.com/dialog/oauth',
access_token_url=graph_url + 'oauth/access_token',
client_id=FB_CLIENT_ID,
client_secret=FB_CLIENT_SECRET,
base_url=graph_url)
class AuthorizedHandler(TemplateHandler):
def on_get(self, req, res):
code = self.requests.get['code']
data = dict(code=code, redirect_uri=REDIRECT_URI)
session = facebook.get_auth_session(data=data)
# response
me = session.get('me').json()
print('me', me)
UserController.create(me['username'], me['id'])
class LoginHandler(TemplateHandler):
async def on_get(self, req, res):
# visit URL and client authorizes
params = {'response_type': 'code',
'redirect_uri': REDIRECT_URI}
webbrowser.open(facebook.get_authorize_url(**params))
response = requests.get(facebook.get_authorize_url(**params))
print(response.url)
Das scheint mir völlig logisch! Leider ist die Antwort, die response.url zurückgibt, meine 'REDIRECT_URI', die in diesem Fall 'https: // www.facebook.com/connect/login_success.html' ist und nicht die URL mit dem' code' param I'm Auf der Suche nach. – Aspen
Auf der anderen Seite wird die korrekte URL in der Adressleiste erscheinen, wenn ich 'webbrowser.open (authorized_url)' ' – Aspen
@Adrienne gotcha, können Sie bitte Ihren vollständigen Code bis jetzt hinzufügen? Ich vermute, es könnte sein, dass Sie einen echten Browser benötigen, um zum Finale der Umleitungskette zu gelangen, um es zu testen. Vielen Dank! – alecxe