跳转到主要内容

为Python-requests HTTP库添加开放认证支持的钩子。

项目描述

# requests-oauth

此插件为 <a href="https://github.com/kennethreitz" rel="nofollow">@kennethreitz</a> 众所周知的 <a href="http://github.com/kennethreitz/requests" rel="nofollow">requests</a> 库添加OAuth v1.0支持,提供头部和URL编码的认证。

requests-oauth希望建立最简单、最直接的Python OAuth实现方式。它最初基于 <a href="https://github.com/simplegeo/python-oauth2" rel="nofollow">python-oauth2</a>(看起来未维护),感谢作者和贡献者为提供OAuth至python httplib2所做的巨大努力。从那时起,代码库已得到清理,修复了几个错误,并进行了大量重构以消除与python-oauth2的依赖,现在成为一个独立的插件。

  • 作者: <a href="http://www.github.com/maraujop/" rel="nofollow">Miguel Araujo</a>

  • 许可证: BSD

## 安装

您可以通过以下方式安装requests-oauth

pip install requests-oauth

## 使用

导入钩子执行

from oauth_hook import OAuthHook

您可以通过传递5个参数来初始化钩子:access_tokenaccess_token_secretconsumer_keyconsumer_secretheader_auth。前两个access_tokenaccess_token_secret是可选的,如果您想从API服务中获取这些信息(稍后示例中说明)。初始化钩子有两种方式。第一种

oauth_hook = OAuthHook(access_token, access_token_secret, consumer_key, consumer_secret, header_auth)

header_auth参数让您选择使用的认证方法。它是一个布尔值,如果您将其设置为True,则将使用授权头。如果您的API支持此认证方法,则应使用此方法,这是OAuth规范推荐的方法(<a href="http://tools.ietf.org/html/rfc5849#section-3.5" rel="nofollow">http://tools.ietf.org/html/rfc5849#section-3.5</a>),例如Twitter的API。默认情况下,header_auth设置为False,这意味着将使用URL编码认证。这是因为这是最广泛支持的认证系统。

如果您一直使用相同的consumer_keyconsumer_secret,您可能希望设置这些固定值,这样您就只需要传递用于设置钩子的令牌参数。

OAuthHook.consumer_key = consumer_key OAuthHook.consumer_secret = consumer_secret oauth_hook = OAuthHook(access_token, access_token_secret, header_auth=True)

现在您需要将钩子传递给python-requests,您可能希望将其作为一个会话来完成,这样您就不必每次都这样做。

client = requests.session(hooks={'pre_request': oauth_hook})

您得到的是python-requests客户端,您可以像使用requests API一样使用它。让我们看看一个GET示例

response = client.get('

还有一个POST示例

response = client.post('

## 三方授权

首次授权和认证遵循名为三方OAuth的系统,这在Twitter文档中描述得非常详细(<a href="https://dev.twitter.com/docs/auth/implementing-sign-twitter" rel="nofollow">https://dev.twitter.com/docs/auth/implementing-sign-twitter</a>)。

基本上由三个步骤组成。让我们基于Imgur的API看看一个示例。所有其他API的工作方式几乎相同,只是端点(urls)不同。

#### 第1步:获取请求令牌

我们开始请求一个请求令牌,这个令牌最终将变成一个访问令牌,这是我们代表用户操作所需的。

imgur_oauth_hook = OAuthHook(consumer_key=YOUR_IMGUR_CONSUMER_KEY, consumer_secret=YOUR_IMGUR_CONSUMER_SECRET) response = requests.post('

#### 第2步:将用户重定向以获取授权

在此步骤中,我们向用户提供一个链接或在网页浏览器中打开重定向,将其重定向到端点,并将前一步获得的oauth_token作为URL参数传递。用户将看到一个对话框,请求授权我们的应用程序。在这种情况下,我们正在执行一个带外带桌面应用程序,因此用户必须输入一个名为verifier的代码。在Web应用程序中,我们将以webhook的形式获得此代码。

print “Go to

#### 第3步:认证

一旦我们获得用户的授权,我们就请求一个最终的访问令牌,以便代表用户操作。我们使用步骤1中获得的先前请求令牌信息构建一个新的钩子,并使用oauth_verifier键将验证器(在第2步获得)作为数据传递。

new_imgur_oauth_hook = OAuthHook(oauth_token, oauth_secret, IMGUR_CONSUMER_KEY, IMGUR_CONSUMER_SECRET) 响应 = requests.post(‘http://api.imgur.com/oauth/access_token’, {‘oauth_verifier’: oauth_verifier}, hooks={‘pre_request’: new_imgur_oauth_hook}) 响应 = parse_qs(响应.content) final_token = 响应[‘oauth_token’][0] final_token_secret = 响应[‘oauth_token_secret’][0]

这些 final_tokenfinal_token_secret 是我们处理用户OAuth所需凭据,因此您可能需要以某种方式持久化它们。这些是在构建带有新钩子的请求会话时应使用的凭据。请注意,并非所有OAuth API都提供无限期的凭据。

## 测试

如果您想运行测试,需要将 test_settings.py.template 复制到 test_settings.py。此文件在 .gitignore 索引中,因此不会被提交

cp test_settings.py.template test_settings.py

然后填写那里的信息。该库的测试是通过功能方式进行的,对公共OAuth API(如Twitter)进行GET和POST操作,因此请使用测试账户而不是您的个人账户

./tests.py

## 贡献

如果您想贡献,请简单地将存储库Fork,将更改提交到 dev 分支(或从中分支),然后发送拉取请求。确保您已将自己在 AUTHORS 中添加。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

requests-oauth-0.4.1.tar.gz (10.0 kB 查看哈希值)

上传时间

由以下提供支持