Ich verwende eine Python -Bibliothek namens libtado (https://github.com/germainlefebvre4/liBtado). Es funktioniert gut, aber eine Anfrage antwortet mit 403 , obwohl dieselbe Anforderung 200 erhält, wenn Google Chrome es macht. Ich habe hier auf Stackoverflow und anderen Websites einige Themen darüber gelesen, und ich kann das Problem nicht genau bestimmen.
Ich würde 200 jetzt erwarten, aber nein ... der einzige Unterschied, den ich jetzt sehe, ist das Fehlen von--data-raw , aber ich weiß nicht, wie man das integriert. Futhermore, der andere Put Aufrufe ohne es funktionieren ...
Wenn ich R.Text drucke (drucke ich.
Ich verwende eine Python -Bibliothek namens libtado (https://github.com/germainlefebvre4/liBtado). Es funktioniert gut, aber eine Anfrage antwortet mit 403 , obwohl dieselbe Anforderung 200 erhält, wenn Google Chrome es macht. Ich habe hier auf Stackoverflow und anderen Websites einige Themen darüber gelesen, und ich kann das [url=viewtopic.php?t=26065]Problem[/url] nicht genau bestimmen.[code]from libtado.api import Tado t = Tado(token_file_path=token_file_path)
print(t.get_schedule_timetables(2)) print("-------------------") print(t.set_early_start(2, False)) print("-------------------") t.set_schedule(2, 1) < /code> ... gibt dieser Ausgabe: < /p> (venv-libtado) PS C:\Git\tado-schedules> python tado-schedules-and-sheets.py -s 0 [{'id': 0, 'type': 'ONE_DAY'}, {'id': 1, 'type': 'THREE_DAY'}, {'id': 2, 'type': 'SEVEN_DAY'}] ------------------- {'enabled': False} ------------------- Traceback (most recent call last): File "C:\Git\tado-schedules\tado-schedules-and-sheets.py", line 164, in t.set_schedule(2, 1) File "C:\Git\tado-schedules\venv-libtado\Lib\site-packages\libtado\api.py", line 1049, in set_schedule return self._api_call('homes/%i/zones/%i/schedule/activeTimeTable' % (self.id, zone), payload, method='PUT') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Git\tado-schedules\venv-libtado\Lib\site-packages\libtado\api.py", line 294, in _api_call res = call_put(url, data) ^^^^^^^^^^^^^^^^^^^ File "C:\Git\tado-schedules\venv-libtado\Lib\site-packages\libtado\api.py", line 275, in call_put r.raise_for_status() File "C:\Git\tado-schedules\venv-libtado\Lib\site-packages\requests\models.py", line 1026, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 403 Client Error: for url: https://my.tado.com/api/v2/homes/[myzone]/zones/2/schedule/activeTimeTable [/code] Die ersten HTTP -Aufrufe erhalten also 200 . Einer von ihnen ist GET (https://github.com/germainlefebvre4/liBtado/blob/18dc32131e1bca8dee1f02a45ff00e3be6debb49/liBtado.py#l949999), einer wird put (https://github.com/germainlefebvre4/liBtado/BLOB/18DC32131E1BCA8DEE1F02A45FF00E3BE6DEBB49/LIBTADO/API.PY#L1473). (Ich habe ein paar andere ausprobiert, sie funktionieren auch.) , aber set_schedule () (https://github.com/germainlefebvre4/liBtado/blob/18dc32131e1bca8dee1f02a45ff00e3be6Debb49/liBtado/api.py#l1010) funktioniert jedoch nicht. In der offiziellen Website von Tado erhält die Anfrage 200 . Dies heißt Anfrage von Google Chrome (kopiert für Bash): < /p> [code]curl 'https://my.tado.com/api/v2/homes/[myzone]/zones/2/schedule/activeTimetable?ngsw-bypass=true' \ -X 'PUT' \ -H 'accept: application/json, text/plain, */*' \ -H 'accept-language: nl,en-US;q=0.9,en;q=0.8,de;q=0.7' \ -H 'authorization: Bearer [mytoken]' \ -H 'content-type: application/json' \ -H 'origin: https://app.tado.com' \ -H 'priority: u=1, i' \ -H 'referer: https://app.tado.com/' \ -H 'sec-ch-ua: "Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "Windows"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: same-site' \ -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' \ -H 'x-amzn-trace-id: tado=webapp-release/v3786' \ --data-raw '{"id":1}' [/code] So I replaced (https://github.com/germainlefebvre4/libtado/blob/18dc32131e1bca8dee1f02a45ff00e3be6debb49/libtado/api.py#L103C4-L106C6) with: [code]self.access_headers = { #'Authorization': f'Bearer {access_token}', # Changed to mimic Google Chrome #'User-Agent': 'python/libtado', # Changed to mimic Google Chrome # Added to mimic Google Chrome: "authority": "my.tado.com", "method": "PUT", "path": "/api/v2/homes/[myzone]/zones/2/schedule/activeTimetable?ngsw-bypass=true", "scheme": "https", "accept": "application/json, text/plain, */*", "accept-encoding": "gzip, deflate, br, zstd", "accept-language": "nl,en-US;q=0.9,en;q=0.8,de;q=0.7", "authorization": "Bearer [mytoken]", "content-length": "8", "origin": "https://app.tado.com", "priority": "u=1, i", "referer": "https://app.tado.com/", "sec-ch-ua": "\"Chromium\";v=\"140\", \"Not=A?Brand\";v=\"24\", \"Google Chrome\";v=\"140\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Windows\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-site", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36", "x-amzn-trace-id": "tado=webapp-release/v3786" } [/code] Ich würde 200 jetzt erwarten, aber nein ... der einzige Unterschied, den ich jetzt sehe, ist das Fehlen von--data-raw , aber ich weiß nicht, wie man das integriert. Futhermore, der andere Put Aufrufe ohne es funktionieren ... Wenn ich R.Text drucke (drucke ich.[code]r[/code] = https://github.com/germainlefebvre4/liBtado/blob/18dc32131e1bca8dee1f02a45ff00E3be6DEBB49/liBtado/API.py#l253), das ist nicht hilfreich (nicht hilfreich):[code]{"errors":[{"code":"accessDenied","title":"current user is not allowed to access this resource"}]} [/code] Hat jemand eine Idee, wie man dieses Verhalten behebt?>
Situation: Dies ist mein erstes Full-Stack-Projekt. Ich verwende HTML/CSS/Bootstrap mit Python/Flask/SQLite für eine einfache Mietbuchungs-WebApp. Die Homepage ist abgeschlossen und umfasst unter...
Ich verwende Envoy als Proxy, um gRPC-Anfragen an einen Backend-gRPC-Dienst weiterzuleiten. Mein Backend-Dienst läuft auf Port 9090 und Envoy lauscht auf Port 8084. Wenn ich eine gRPC-Anfrage an...
Ich versuche, mithilfe der Kotlin-Bibliothek die neuesten Scandaten für eine bestimmte Benutzer-ID aus meiner Supabase-Tabelle abzurufen. Die Abfrage gibt jedoch eine leere Liste zurück, obwohl...
Ich habe kürzlich meinen Jenkins -Server von JDK 17 auf JDK 23 aktualisiert und Jenkins von 2,475 auf 2,496 verbessert. Dabei habe ich auch das Deckungs -Plugin installiert (um die veralteten...