Mi rendo conto che è vecchio, ma ho pensato di gettare la soluzione, se si sta utilizzando Python 3 con httplib2 dal momento che non sono stato in grado di trovare da nessun'altra parte. Sto anche autenticandomi contro un server Jenkins utilizzando il token API per ogni utente Jenkins. Se non sei interessato a Jenkins, sostituisci semplicemente la password dell'utente reale per il token API.
b64encode si aspetta una stringa binaria di caratteri ASCII. Con Python 3 viene generato un errore TypeError se viene passata una stringa semplice. Per aggirare questo problema, la parte "user: api_token" dell'intestazione deve essere codificata usando "ascii" o "utf-8", passato a b64encode, quindi la stringa di byte risultante deve essere decodificata su una stringa semplice prima di essere inserita nell'intestazione. Il codice seguente ha fatto ciò che mi serviva:
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)
Questo funziona anche per il 'httplib' incorporato, vedere la mia risposta di seguito. –
beh io vorrei +1 se avessi incluso il tuo script python per l'autenticazione contro jenkins/hudson – Toskan