TeamCity:urllib2.HTTPError:HTTP错误401:未经授权

时间:2017-05-16 03:27:19

标签: python python-2.7 teamcity urllib2

编写脚本以取消在TeamCity上运行的旧版本。我能够根据我的要求(buildTypeId,branchName)列出所有正在运行的构建。我需要发送一个REST API调用来取消旧版本,这个请求会抛出401错误。我想使用urllib2滥用POST方法。有人可以帮我这个吗?

import urllib2
import re
from xml.dom import minidom
url = 'https://<TeamCity>/httpAuth/app/rest/builds?locator=running:true'
username = user_name
password = password
p = urllib2.HTTPPasswordMgrWithDefaultRealm()
p.add_password(None, url, username, password)
handler = urllib2.HTTPBasicAuthHandler(p)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
dom = minidom.parse(urllib2.urlopen(url))
build = dom.getElementsByTagName('build')

for i in range(0, len(build)):
    for j in range(i+1, len(build)):
        find_build_type = re.search(r'<Job_1>.*', build[i].getAttribute("buildTypeId"), re.M | re.I)
        if build[i].getAttribute("branchName") != '<default>' and find_build_type:
            if (build[i].getAttribute("buildTypeId") == build[j].getAttribute("buildTypeId") and build[i].getAttribute("branchName") == build[j].getAttribute("branchName")):
                #Get the old build
                old_run = "https://<TeamCity>/app/rest/buildQueue/id:" + str(min(int(build[j].getAttribute("id")),int(build[i].getAttribute("id"))))
                #headers
                headers={"Content-Type": "application/xml"}
                #data
                passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
                passman.add_password(None, url, username, password)
                opener = urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman))
                urllib2.install_opener(opener)
                r = urllib2.Request(old_run, data, headers)
                #send API request to cancel the old build
                u = urllib2.urlopen(r)

0 个答案:

没有答案