Python 如何使用oauth2访问StackExchangeAPI?

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

我遵循这里提到的说明:

但是由于没有提供代码,我无法正确理解流程

我一直在尝试使用下面的两种方法完成身份验证部分,但我遇到了一个死胡同

1) 2) 我不知道从这里该怎么走?我需要使用返回的访问令牌并使用它来查询API。一个示例代码真的很有帮助!谢谢

编辑:这是我当前使用的代码:

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)