用于向python请求http库添加开放身份验证支持的钩子。
requests-oauth的Python项目详细描述
#请求OAuth
此插件将OAuth v1.0支持添加到http://github.com/kennethritz/rel="nofollow">https://github.com/kennethritz">;@kennethritz<;/a>;知名的<;a href="http://github.com/kennethritz/requests" rel="nofollow">http://github.com/kennethritz/requests">;请求<;/a>;库PR提供头和URL编码的身份验证。
请求oauth希望提供在python中执行oauth的最简单和最简单的方法。它最初是基于:https://github.com/simplegeo/python-oauth2" rel="nofollow">https://github.com/simplegeo/python-oauth2">;python-oauth2<;/a>;(看起来未维护),作者和贡献者为将oauth提供给python httplib2付出了巨大努力。从那时起,代码库已经被清理干净,修复了几个bug,并对其进行了大量重构,以消除与python-oauth2的依赖关系,而python-oauth2现在是一个独立的插件。
- 作者:<;a href="http://www.github.com/maraujop/">;miguel araujo<;/a>;
- 许可证:BSD
##安装
您只需执行以下操作即可安装oauth请求:
< Buff行情> PIP安装请求OAuth##用法
导入挂钩操作:
< Buff行情> 从oauth_hook导入oauthhook您可以通过5个参数初始化钩子:access_token,access_token_secret,consumer_key,consumer_secret和header_auth。前两个访问令牌和访问令牌是可选的,以防您想从api服务检索它们(参见后面的示例)。有两种方法可以初始化钩子。第一个:
< Buff行情> oauth_hook=oauthhook(访问令牌、访问令牌秘密、使用者密钥、使用者秘密、头身份验证)header\u auth参数允许您选择所使用的身份验证方法。这是一个布尔值,如果将其设置为true则将使用授权头。如果您的api支持这种身份验证方法,那么它就是您应该使用的方法,也是oauth规范(http://tools.ietf.org/html/rfc5849-section-3.5 rel="nofollow">http://tools.ietf.org/html/rfc5849-section-3.5">;rfc5849<;/a>;)推荐的方法,例如twitter的api。默认情况下,header\u auth设置为false,这意味着将使用url编码的身份验证。这是因为这是最广泛支持的身份验证系统。
如果您一直使用相同的使用者密钥和使用者密钥,则可能需要设置那些已修复的密钥,这样您只需传递用于设置挂钩的令牌参数即可:
< Buff行情> oauthhook.consumer_key=用户密钥 oauthhook.consumer\u secret=消费者秘密 oauth_hook=oauthhook(访问令牌,访问令牌,机密,头认证=true)现在您需要将钩子传递给python请求,您可能希望将其作为会话来执行,因此您不必每次都执行此操作:
< Buff行情> client=requests.session(hooks={'pre_request':oauth_hook})您得到的是python请求客户端,您可以使用与使用请求api相同的方法。让我们看一个get示例:
< Buff行情> response=client.get('http://api.twitter.com/1/account/rate_limit_status.json') results=json.loads(response.content)还有一个帖子示例:
< Buff行情> response=client.post('http://api.twitter.com/1/statuses/update.json',{'status':"耶!它起作用了!","包装链接":true})##三腿授权
首次授权和授权阳离子遵循一个名为"三脚OAuth"的系统,该系统在<;a href="https://dev.twitter.com/docs/auth/implementing sign twitter">;twitter文档中有很好的描述。
基本上它由三个步骤组成。让我们看一个基于imgur的api的示例。所有其他api的工作方式几乎相同,只有端点(url)更改:
####步骤1:获取请求令牌
我们开始请求一个请求令牌,它最终将变成一个访问令牌,这是我们需要代表用户操作的令牌。
< Buff行情> imgur_oauth_hook=oauthhook(consumer_key=your_imgur_consumer_key,consumer_secret=your_imgur_consumer_secret) response=requests.post('http://api.imgur.com/oauth/request廑token',hooks={'pre廑request':imgur廑oauth廑hook}) qs=解析qs(response.text) oauth_token=qs['oauth_token'][0] oauth_secret=qs['oauth_token_secret'][0]####步骤2:重定向用户以获取授权
在这一步中,我们为用户提供一个链接或打开一个web浏览器,将其重定向到一个端点,并将上一步中获得的oauth_令牌作为url参数传递。用户将得到一个对话框,要求授权我们的应用程序。在这种情况下,我们正在做一个带外桌面应用程序,因此用户将不得不为我们输入一个名为verifier的代码。在web应用程序中,我们将以webhook的形式获取此代码。
< Buff行情> print"转到http://api.imgur.com/oauth/authorize?OAuth_令牌=%s允许应用程序并复制您的PIN%OAuth_令牌 oauth_verifier=raw_input('请输入您的PIN:')####第3步:验证
一旦我们得到用户的授权,我们就请求一个最终的访问令牌,代表用户进行操作。我们使用在步骤1中获得的先前请求令牌信息构建一个新的钩子,并使用oauth\u验证器将验证器(在步骤2中获得)作为数据传递
< Buff行情>
new_imgur_oauth_hook=oauthhook(oauth_token,oauth_secret,imgur_consumer_key,imgur_consumer_secret)
response=requests.post('http://api.imgur.com/oauth/access戥u token',{oauth戥u verifier':oauth戥u verifier},hooks={pre戥request':new戥imgur戥ou oauth
response=解析(response.content)
final_token=响应['oauth_token'][0]
final_token_secret=响应['oauth_token_secret'][0] 这些final_token和final_token_secret是处理用户OAuth所需的凭据,因此您很可能希望以某种方式持久化它们。这些是使用新钩子构建请求会话时应该使用的。请注意,并非所有OAuth API都提供无限时间凭据。 ##测试 如果要运行测试,则需要将test_settings.py.template复制到test_settings.py中。此文件位于.gitignore索引中,因此不会提交: 然后在那里填写信息。库的测试是以一种功能性的方式完成的,对公共的oauth api(如twitter)执行get和post操作,因此使用一个测试帐户而不是您的个人帐户: ##贡献 如果您想贡献,只需分叉存储库,将您的更改提交到dev分支(或其分支),然后发送一个pull请求。请确保将自己添加到作者中。推荐PyPI第三方库