Vu que Mickael traîne (

) je poste le script qui va bien pour récupérer une donnée sur une box huawei (4G box bouygues).
En l’occurrence les data consommés pour le mois en cours
Code : Tout sélectionner
#!/usr/bin/env python
import requests
import re
import hashlib
import base64
import xml.etree.ElementTree as ET
import urllib2
from StringIO import StringIO
def login(baseurl, username, password):
s = requests.Session()
r = s.get(baseurl + "html/index.html")
csrf_tokens = grep_csrf(r.text)
s.headers.update({
'__RequestVerificationToken': csrf_tokens[1],
})
data = login_data(username, password, csrf_tokens[1])
print("api/user/login")
r = s.post(baseurl + "api/user/login", data=data)
print(r.text)
s.headers.update({
'__RequestVerificationToken': r.headers["__RequestVerificationTokenone"]
})
return s
def change_mode(baseurl, session):
r = s.get(baseurl + "api/monitoring/month_statistics")
root = ET.fromstring(r.text)
data5 = root.find('CurrentMonthDownload')
print(data5.text)
data6 = str(round((int(data5.text) * 0.000000009699), 2))
print(data6)
requete='http://IP_DOMOTICZ:PORT_DOMOTICZ/json.htm?type=command¶m=udevice&idx=NUMERO_IDX&nvalue=0&svalue='+data6
r=requests.get(requete)
def grep_csrf(html):
pat = re.compile(r".*meta name=\"csrf_token\" content=\"(.*)\"", re.I)
matches = (pat.match(line) for line in html.splitlines())
return [m.group(1) for m in matches if m]
def login_data(username, password, csrf_token):
def encrypt(text):
m = hashlib.sha256()
m.update(text)
return base64.b64encode(m.hexdigest())
password_hash = encrypt(username + encrypt(password) + csrf_token)
return '<?xml version:"1.0" encoding="UTF-8"?><request><Username>admin</Username><Password>'+password_hash+'</Password><password_type>4</password_type></request>'
WEB = "http://IP_BOX/"
USERNAME = "USER_BOX"
PASSWORD = "PWD_BOX"
s = login(WEB, USERNAME, PASSWORD)
change_mode(WEB, s)
Mickaël l'a un peu simplifié...mais l'idée est là !!