Python 如何使用oauth2访问StackExchangeAPI?
我遵循这里提到的说明: 但是由于没有提供代码,我无法正确理解流程 我一直在尝试使用下面的两种方法完成身份验证部分,但我遇到了一个死胡同 1) 2) 我不知道从这里该怎么走?我需要使用返回的访问令牌并使用它来查询API。一个示例代码真的很有帮助!谢谢 编辑:这是我当前使用的代码:Python 如何使用oauth2访问StackExchangeAPI?,python,oauth-2.0,stackexchange-api,Python,Oauth 2.0,Stackexchange Api,我遵循这里提到的说明: 但是由于没有提供代码,我无法正确理解流程 我一直在尝试使用下面的两种方法完成身份验证部分,但我遇到了一个死胡同 1) 2) 我不知道从这里该怎么走?我需要使用返回的访问令牌并使用它来查询API。一个示例代码真的很有帮助!谢谢 编辑:这是我当前使用的代码: from requests_oauthlib import OAuth2Session from pprint import pprint client_id = 'x' client_secret = 'x' red
from requests_oauthlib import OAuth2Session
from pprint import pprint
client_id = 'x'
client_secret = 'x'
redirect_uri = 'https://stackexchange.com/oauth/login_success'
scope = 'no_expiry'
oauth = OAuth2Session(client_id, redirect_uri=redirect_uri, scope=scope)
pprint(vars(oauth))
authorization_url, state = oauth.authorization_url('https://stackexchange.com/oauth/dialog')
print(authorization_url)
不必单击authorization_url并获取令牌,是否有一种方法可以直接在脚本本身中获取令牌 在您使用的两种方法中,第一种是桌面应用程序的推荐方法。这可能是正确的 OAuth旨在强制用户访问特定网页,并确认他们正在授予应用程序访问其数据的权限(通常通过单击按钮)。您打印的HTTP响应只是用户需要单击“接受”的网页 要获得流的感觉,请将第一个地址()放在地址栏中,然后在加载的页面上单击accept。
access\u令牌
将立即出现在URL中
如果您只为自己制作应用程序,则可以将access\u令牌
复制到Python脚本中。代币一天后到期;如果时间太短,则将no_expire
添加到scope
以使其永远持续。不要与任何其他人共享令牌,因为它允许他们访问您帐户的详细信息!脚本的每个用户都必须生成自己的令牌
通过在应用程序的键中插入access\u令牌
,测试access\u令牌
,并将刚刚获得的access\u令牌
插入url:
如果您需要一个更加自动化、集成化、用户友好的解决方案,我会打开一个浏览器窗口,获取结果凭证。只需对Marc的答案稍加修改即可。如果您想让访问令牌永久使用,您应该添加no\u expire
而不是no\u expire
非常感谢!你能检查一下我的编辑吗?如何自动获取令牌的过程?正如我所提到的,我将使用SeleniumWebDriver来自动获取令牌。我请你参考一个SO问题,该问题描述了类似的情况。如果你需要进一步的信息,我相信应该在一个新的问题。请务必提及您的需求:它必须是完全无头的还是GUI允许的?是否可以安装其他软件,或者是否需要纯Python?您是否曾经通过Python进行过身份验证?如果是这样的话,您介意发布示例代码吗?
import oauth2 as oauth
from pprint import pprint
url = 'https://www.stackexchange.com'
request_token_url = '%s/oauth/' % url
access_token_url = '%s/' % url
consumer = oauth.Consumer(key='mykey',
secret='mysecret')
client = oauth.Client(consumer)
response, content = client.request(request_token_url, 'GET')
print(response, content)
from requests_oauthlib import OAuth2Session
from pprint import pprint
client_id = 'x'
client_secret = 'x'
redirect_uri = 'https://stackexchange.com/oauth/login_success'
scope = 'no_expiry'
oauth = OAuth2Session(client_id, redirect_uri=redirect_uri, scope=scope)
pprint(vars(oauth))
authorization_url, state = oauth.authorization_url('https://stackexchange.com/oauth/dialog')
print(authorization_url)