具有OAuth身份验证的Python客户端程序

时间:2018-08-22 20:25:10

标签: python oauth

我正在为客户端程序编写测试代码,该程序必须登录基于oauth的服务(Wrike.com),并且正在寻找最简单的代码,而无需安装python之类的自定义库-oauth等。

我当前的测试代码如下

import urllib, webbrowser
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import urlparse

PORT_NUMBER = 80

class TestException(Exception):
    pass

class myHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        print(urlparse.parse_qs(self.path))
        raise TestException


ue = urllib.urlencode({"redirect_uri": "http://localhost"})
webbrowser.open("https://www.wrike.com/oauth2/authorize?    
client_id=xxx&response_type=code&%s" % ue)

try:
    server = HTTPServer(('', PORT_NUMBER), myHandler)
    print 'Started Test httpserver on port ', PORT_NUMBER
    server.serve_forever()
except TestException:
    print "TestException"
    server.shutdown()

此代码调用服务器的身份验证页面,当我按“允许”时允许我的程序访问服务器(工作),然后据我了解,它重定向到我需要blabla的“ http://localhost/?code=blabla”。然后应停止服务器(通过引发TestException),并且blabla令牌代码应为 用作登录令牌。

问题是: 由于某些原因,访问本地主机后,此代码将引发两次TestException,而不是一次(首先使用有效的令牌代码,第二次使用空字符串)。 从“ http://localhost/?code=blabla”“ print(urlparse.parse_qs(self.path))”,得到结果“ {'/?code':['blabla']”,而不是“ {'code':[' blabla']“(区别是'/?')。这似乎是不稳定的(如果我有更多的变量,则第一个将带有'/?'前缀,并且不能保证这是'code'变量。 我的方法好吗?我是网络/ oauth新手,不确定是否是捕获此数据的最佳方法(请注意,我不想使用非标准库,因为这会使安装脚本变得复杂)。

PS当前,此代码的目标是获取'blabla'令牌,该令牌由'print(urlparse.parse_qs(self.path))'行完成。

谢谢。

0 个答案:

没有答案
相关问题