使用Python的HTTPBasicAuthHandler进行Bitbucket API身份验证
发布时间:2020-12-20 11:13:31 所属栏目:Python 来源:网络整理
导读:我正在尝试使用 bitbucket’s API获取私有存储库上的问题列表. 我已经确认HTTP基本身份验证适用于hurl,但我无法在Python中进行身份验证.调整了这个tutorial的代码,我编写了以下脚本. import cookielibimport urllib2class API(): api_url = 'http://api.bitb
我正在尝试使用
bitbucket’s API获取私有存储库上的问题列表.
我已经确认HTTP基本身份验证适用于hurl,但我无法在Python中进行身份验证.调整了这个tutorial的代码,我编写了以下脚本. import cookielib import urllib2 class API(): api_url = 'http://api.bitbucket.org/1.0/' def __init__(self,username,password): self._opener = self._create_opener(username,password) def _create_opener(self,password): cj = cookielib.LWPCookieJar() cookie_handler = urllib2.HTTPCookieProcessor(cj) password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() password_manager.add_password(None,self.api_url,password) auth_handler = urllib2.HTTPBasicAuthHandler(password_manager) opener = urllib2.build_opener(cookie_handler,auth_handler) return opener def get_issues(self,repository): query_url = self.api_url + 'repositories/%s/%s/issues/' % (username,repository) try: handler = self._opener.open(query_url) except urllib2.HTTPError,e: print e.headers raise e return handler.read() api = API(username='my_username',password='XXXXXXXX') api.get_issues(‘my_username’,’my_repository’)导致: >>> Server: nginx/0.7.62 Date: Mon,19 Apr 2010 16:15:06 GMT Content-Type: text/plain Connection: close Vary: Authorization,Cookie Content-Length: 9 Traceback (most recent call last): File "C:/USERS/personal/bitbucket-burndown/bitbucket-api.py",line 29,in <module> print api.get_issues('my_username','my_repository') File "C:/USERS/personal/bitbucket-burndown/bitbucket-api.py",line 25,in get_issues raise e HTTPError: HTTP Error 401: UNAUTHORIZED api.get_issues(‘jespern’,’bitbucket’)就像一个魅力. 我的代码出了什么问题? 解决方法
看起来
HTTPBasicAuthHandler存在问题.这有效:
class API(): api_url = 'http://api.bitbucket.org/1.0/' def __init__(self,password,proxy=None): encodedstring = base64.encodestring("%s:%s" % (username,password))[:-1] self._auth = "Basic %s" % encodedstring self._opener = self._create_opener(proxy) def _create_opener(self,proxy=None): cj = cookielib.LWPCookieJar() cookie_handler = urllib2.HTTPCookieProcessor(cj) if proxy: proxy_handler = urllib2.ProxyHandler(proxy) opener = urllib2.build_opener(cookie_handler,proxy_handler) else: opener = urllib2.build_opener(cookie_handler) return opener def get_issues(self,repository) try: req = urllib2.Request(query_url,None,{"Authorization": self._auth }) handler = self._opener.open(req) except urllib2.HTTPError,e: print e.headers raise e return json.load(handler) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |