我正在为客户端程序编写测试代码,该程序必须登录基于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))'行完成。
谢谢。