Mon but est dans cette partie d'extraire le token de cette réponse.
{"access_token":"eyJ0eXAI1NiJ9.eyJpc3Mic3MifQ.DDY71FpHgQ","access_token_expires":7200,"refresh_token":"eyJ0eXiJ9.eyVkz__N9kliGO4Q","refresh_token_expires":86400,"credentials":"auth=d}
Sans sortir du programme car subprocess.check_output() faisait ceci sur retour d'erreur avec l'except en fin de programme.
Du coup, j'utilise comme on me l'a conseillé "subprocess.run()" mais le dictionnaire n'a plus l'air bon ! (voir sortie).
Mon code :
1 2 3 4 5
| response = subprocess.run(['curl', '-XPOST -c cookies.txt -d \"user=user&pass=password&stateful=1\" https://mondomain.org/api/host/login.json"'], capture_output=True, text = True);
d = dict([[element.strip('"') for element in key_value.split(':',':')] for key_value in response.stdout.strip('{}').split(',')])
token = d['access_token'] |
L'erreur renvoyée :
1 2
| d = dict([[element.strip('"') for element in key_value.split(':')] for key_value in response.stdout.strip('{}').split(',')])
ValueError: dictionary update sequence element #0 has length 1; 2 is required |
On m'a conseillé d'utiliser en lieu et place de subprocess la lib urllib pour faire une requete HTTP.
J'ai essayé ce code :
1 2 3 4 5 6
| data = '-c cookies.txt -d "user=user&pass=mypassword&stateful=1'
data = data.encode('ascii')
q = Request('http://mondomain.org/api/host/login.json', data=data)
a = urlopen(q).read()
print(a) |
Pour obtenir :
urllib.error.HTTPError: HTTP Error 401: Unauthorized
Si vous avez des idées, je suis preneur.
Merci et bon week-end !
Partager