Bonjour à tous,

Voici la situation, je tape dans l'API d'un équipement réseau afin de récupérer des informations.

Pour des tests, j'utilise parfaitement la librairie xmlrpclib, qui me permet de transmettre et récupérer mes informations plutôt facilement.

Mais, je dois maintenant m'authentifier auprès de l'API par le système NTLM des serveurs Windows.

La seule solution que j'ai trouvé et de passer par urllib2 et la librairie externe python-ntlm.

Mon code se compose alors:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
import xmlrpclib, sys, os, socket, urllib2
from ntlm import HTTPNtlmAuthHandler
 
user = 'xx\user'
password = "mycrazypassword"
url = "http://ip/api.asmx"
 
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password)
 
# Create the NTLM authentification handler
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman)
 
# Creta and install the opener
opener = urllib2.build_opener(auth_NTLM)
urllib2.install_opener(opener)
 
# retrieve the result
respond = urllib2.urlopen(url)
print(respond.read()
Voilà ce qui me permet de me connecter à l'API, jusque là ça va, ça fonctionne, la vie est belle.

Maintenant, je dois passé au serveur du contenu XML (via Post). Et là ça se complique. La fonction urllib.urlopen permet un deuxième argument, qui consiste à envoyer des données via Post, mais ceux-ci sont de type "application/x-www-form-urlencoded".
Surtout que xmlrpclib me facilitait bien la vie (cf annexe).

Donc, quelqu'un pourrait-il m'orienter vers la réponse ?

A noter que je suis loin d'être expert en python, j'ai l'habitude de l'utiliser pour des petits bout de code.

Merci d'avance, tout réponse est la bienvenue et appréciée.

D;

Annexe, exemple de code avec xmlrpclib (sans authentification):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
import xmlrpclib, sys, os, socket
 
server = xmlrpclib.ServerProxy('http://ip/rpc')
 
data = {'lachainedecaracteredelamortquitue': "cool",
        'maData': data
        }
 
reply = server.maMethodeTropCool(data)
 
print reply