我有一个本地运行的应用程序,可以对网站(tumblr.com
)进行API调用。这涉及设置一些OAuth凭证;沿途的一步需要从服务器指向浏览器的回调URL中提取密钥。所以我目前用户所做的是:
在浏览器中打开授权链接,提示他们在网站上授权OAuth应用程序
点击网站上的授权页面(“是的,我允许xxxxx应用访问与我的帐户关联的某些信息”)
单击Authorize app
向localhost发出请求,其中包含url中的参数。这意味着tumblr会将浏览器重定向到页面http://localhost/?oauth_token={TOKEN}&oauth_verifier={VERIFIER}#_=_
。我认为这会导致在本地机器上发出请求。
要求用户将网址中的关键参数与浏览器的导航栏隔离,并将其粘贴到应用程序中。
那么有什么方法可以绕过第3步和第4步,只是让应用程序选择回调请求,而不是期望用户从浏览器中复制并粘贴它?我担心我对如何在python中处理网络请求知之甚少。
要清楚,我需要做的是获取{VERIFIER}
字符串。
答案 0 :(得分:1)
首先,首先,对于http请求,一个好的python模块是requests
http://docs.python-requests.org/en/master/
然后,您的应用程序会向tumblr提供一个回调地址,以便tumblr可以告诉您的应用客户端信息或登录错误。
现在,你的观点3并不清楚。 “单击授权应用程序向localhost发出请求”
实际上为用户点击“授权应用”会向tumblr发出请求,表示他接受了。 然后tumblr向你的回调网址发出请求,通过信息。
回调网址应该是你的服务器地址,你必须有一个脚本监听tumblr,它会给你一个特殊的参数来调用它们的api ...
此外:
因此,当用户点击“授权应用”时,会向tumblr发出请求,该请求会将用户重定向到回调网址(添加oauth令牌和验证者)。
现在,显然,你不能要求每个用户在他们的计算机上运行http服务器。
因此,您必须将回调网址设置为您的服务器。
因此,如果您将其设置为“myserver.com/tumblr”,则用户将被重定向到您的网页,您将进入您的服务器,并为该用户会话提供oauths令牌和验证者。 / p>
并... 强>
假设您的应用只是客户端,我会说有两种选择。
让您的用户手动输入他们的API密钥。
或者将网络服务器嵌入到您的应用中。
在嵌入式网络服务器的情况下,我建议烧瓶简单。 只需让您的Web服务器侦听给定端口并将回调URL设置为该服务器:port。
这样您就可以直接获得客户端令牌。