我有一个python脚本从jenkins api抓取数据。问题是该脚本在每个请求时都进行身份验证,并且性能不高。我想进行一次身份验证,并能够根据自己的喜好查询数据。
有可能吗?
import requests
from basicauth import encode
from pprint import pprint
import json
class JenkinsInfo(object):
defaultHeader = {
'Accept': 'application/json, */*',
'content-type': 'application/json',
'Authorization': ''
}
def __init__(self, url, user, password):
self.jenkins_url = url.rstrip("/")
self.jenkins_user = user
self.jenkins_password = password
self.s = requests.Session()
self.ssl_verify = ssl_verify
self.defaultHeader['Authorization'] = encode(user, password)
#### the script below is the one that call previous class ###
from prometheus_client import start_http_server,Counter
from conf_example import JENKINS_URL, JENKINS_USER,
JENKINS_PASSWORD
from jenkins_metrics import JenkinsInfo
import time
from sys import exit
def main():
print("Starting Jenkins Metrics")
jenkins = JenkinsInfo(JENKINS_URL, JENKINS_USER, JENKINS_PASSWORD)
答案 0 :(得分:0)
是的,您需要获取一个cookie。确保在整个运行过程中使用相同的会话对象,并仅使第一个请求成为登录请求。不确定Jenkins进行登录需要什么,但是您可能可以从jenkinsapi项目或执行相同操作的其他软件中获得一些好主意。从他们那里复制的代码:
login_url = 'j_acegi_security_check'
jenkins_url = '{0}/{1}'.format(self.baseurl, login_url)
data = urlencode({'j_username': self.username,
'j_password': self.password}).encode("utf-8")
请注意,它们会执行某些用例中可能不需要的操作。还可以考虑实际使用该库或类似的库,而不是从头开始编写自己的代码。