Klocwork Web API 快速掌握(2)-Python 方式

Klocwork server提供了基于 http 的数据访问接口 Web API。使用的方法也是相当的简单。

(1)认证的问题

Web API的访问需要对访问者进行用户身份认证,身份认证信息是存储在一个 ltoken 文件中的。此ltoken文件使用Klocwork提供的命令 kwauth 来生成,访问者从客户端访问时,会从指定位置读取 ltoken 文件中的用户名、密码、服务器URL的信息来进行认证。

ltoken文件位于:

Windows Vista and Windows 7:C:\Users\\.klocwork\ltoken

Windows XP:C:\Documents and Settings\\.klocwork\ltoken

Unix:~/.klocwork/ltoken

Mac:~/.klocwork/ltoken

如果在这些位置找不到 ltoken 文件,则访问时会提示无法访问。此时,需要在发起访问的客户端执行 kwauth 命令:

kwauth --url http://:

然后,按提示输入用户名、密码,即可在上述位置生成 ltoken 文件。

(2)如何使用

Web API 为类似 REST API 的访问接口,以 http 访问的方式来使用。可以使用各种编程语言,例如 Java, Python, Perl 等。

本文介绍 Python 方式(本例来自 Klocwork online document):

import urllib, urllib2, json, sys, os.path, getpass, time

def getToken(host, port, user) :

ltoken = os.path.normpath(os.path.expanduser("~/.klocwork/ltoken"))

ltokenFile = open(ltoken, 'r')

for r in ltokenFile :

rd = r.strip().split(';')

if rd[0] == host and rd[1] == str(port) and rd[2] == user :

ltokenFile.close()

return rd[3]

ltokenFile.close()

class Issue(object) :

def __init__(self, attrs) :

self.id = attrs["id"]

self.message = attrs["message"]

self.file = attrs["file"]

self.method = attrs["method"]

self.code = attrs["code"]

self.severity = attrs["severity"]

self.severityCode = attrs["severityCode"]

self.state = attrs["state"]

self.status = attrs["status"]

self.taxonomyName = attrs["taxonomyName"]

self.url = attrs["url"]

self.created=time.ctime(attrs["dateOriginated"]/1000)

def __str__(self) :

return "[%d] %s\n\t%s | %s\n\tCode %s | Severity: %s(%d) | State: %s | Status: %s | Taxonomy: %s | Created: %s\n\t%s" % (

self.id, self.message, self.file, self.method, self.code, self.severity, self.severityCode, self.state,

self.status, self.taxonomyName, self.created, self.url

)

def from_json(json_object) :

if 'id' in json_object :

return Issue(json_object)

return json_object

host = "localhost"

port = 8090

user = getpass.getuser()

project = "afd"

url = "http://%s:%d/review/api" % (host, port)

values = {"project": project, "user": user, "action": "search"}

loginToken = getToken(host, port, user)

if loginToken is not None :

values["ltoken"] = loginToken

values["query"] = "severity:1"

data = urllib.urlencode(values)

req = urllib2.Request(url, data)

response = urllib2.urlopen(req)

for record in response :

print json.loads(record, object_hook=from_json)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181214G08ZAW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券