2016-07-17 59 views
0

我有一个本地运行的应用程序,使API调用网站(tumblr.com)。这涉及设置一些OAuth凭证;沿途一步需要从服务器指向浏览器的回调URL中提取密钥。因此,我目前拥有的用户做的是:如何检测网址回调请求

  1. 打开一个浏览器的授权链接,提示他们授权的OAuth应用程序在网站上

  2. 点击通过授权页面的网站上( “是的,我让XXXXX应用访问与我的帐户相关的某些信息”)

  3. 点击Authorize app转变成表示包括在URL参数本地主机的请求。这意味着tumblr会将浏览器重定向到页面http://localhost/?oauth_token={TOKEN}&oauth_verifier={VERIFIER}#_=_。我认为这会导致对本地机器发出请求。

  4. 用户需要将URL中的关键参数从浏览器的导航栏中分离出来并粘贴到应用程序中。

那么,有没有我可以绕过步骤3和4,只是已经应用拿起回调请求,而不是期待用户复制并从浏览器中粘贴的方法吗?恐怕我不知道如何处理python中的网络请求。

要清楚,我需要做的是得到{VERIFIER}字符串。

+0

嘿,你介意点3吗? –

+0

@Loïc我澄清了第3点。回调URL实际上是一个tumblr重定向,除了不向另一个服务器发出请求外,它应该向本地计算机发出请求,因为脚本在本地运行。 –

回答

1

好第一件事首先,HTTP请求,一个良好的Python模块requests

http://docs.python-requests.org/en/master/

然后,您的应用程序提供了一个回调地址tumblr使tumblr可以告诉你的应用程序客户端信息,或登录错误。

现在,你的观点3不清楚。 “点击授权应用程序向本地主机发出请求”

实际上,为用户点击“授权应用程序”向tumblr发出请求,表示他接受。 然后tumblr向您的回传网址发送请求,通过相关信息。

回调URL可能应该是您的服务器地址,也必须有一个脚本监听tumblr,这将给你的特殊的参数来调用他们的API ...

另外:

所以当用户点击“授权应用程序”时,有一个请求tumblr,它将用户重定向到回调URL(添加oauth标记和验证器)。

现在,显然,你不能要求每个用户在他们的计算机上运行http服务器。

所以你必须设置回调url到你的服务器。

所以,如果你把它设置为“myserver。COM/tumblr”的情况下,用户会被重定向到您的网页,你会得到你的服务器上,并为用户会话中,oauths令牌和验证。

和...

假设你的应用程序是客户端只我说有两种选择。

要么有你的用户手动输入他们的API密钥。

或任嵌入Web服务器到应用程序中。

我在嵌入式网络服务器的情况下,我会建议烧瓶的简单性。 只需让您的Web服务器在给定端口上侦听并将回调URL设置为该服务器:端口即可。

这样你就可以直接获得客户令牌。

+0

没有第二个服务器,所有的监听都应该发生在本地计算机上 –

+0

回答编辑,但是请告诉我,你没有网络服务器吗? –

+0

不,因为该应用程序实际上更像是一个工具包,它不应该依赖于第三方 –