Tôi nhận ra điều này là cũ, nhưng tôi nghĩ tôi sẽ giải quyết nếu bạn đang sử dụng Python 3 với httplib2 vì tôi không thể tìm thấy nó ở bất kỳ nơi nào khác. Tôi cũng xác thực với máy chủ Jenkins bằng cách sử dụng Mã thông báo API cho mỗi người dùng Jenkins. Nếu bạn không quan tâm đến Jenkins, chỉ cần thay thế mật khẩu của người dùng thực tế cho Mã thông báo API.
b64encode đang mong đợi một chuỗi ký tự ASCII nhị phân. Với Python 3 một TypeError sẽ được nâng lên nếu một chuỗi đơn giản được truyền vào. Để giải quyết vấn đề này, phần "người dùng: api_token" của tiêu đề phải được mã hóa bằng cách sử dụng 'ascii' hoặc 'utf-8', được chuyển đến b64encode, sau đó chuỗi byte kết quả phải được giải mã thành một chuỗi đơn giản trước khi được đặt trong tiêu đề. Đoạn mã sau đã làm những gì tôi cần:
import httplib2, base64
cred = base64.b64encode("{0}:{1}".format(
<user>, <api_token>).encode('utf-8')).decode()
headers = {'Authorization': "Basic %s" % cred}
h = httplib2.Http('.cache')
response, content = h.request("http://my.jenkins.server/job/my_job/enable",
"GET", headers=headers)
Điều này cũng phù hợp với 'httplib' được tích hợp sẵn, xem câu trả lời của tôi bên dưới. –
tôi cũng sẽ +1 nếu bạn đã bao gồm tập lệnh python để xác thực chống lại jenkins/hudson – Toskan