shauntarves / wyze-sdk

A modern Python client for controlling Wyze devices.
The Unlicense
313 stars 49 forks source link

requests.exceptions.HTTPError: 400 Client Error: Bad Request #163

Closed gkaragatchliev closed 10 months ago

gkaragatchliev commented 10 months ago

My code is this:

import os import sys

Enable debug logging

import logging logging.basicConfig(level=logging.DEBUG) import json import wyze_sdk from wyze_sdk import Client

wyze_sdk.set_stream_logger('wyze_sdk', level=logging.DEBUG)

load_dotenv()

email = '@**.com' pw = '' KeyId = '****----**' ApiKey = '***.....'

response = Client().login( email='gkaragatchliev@hotmail.com', password=pw, key_id=KeyId, api_key=ApiKey )

I get this error after all DEBUG: wyze> python .\wyze.py 2024-01-07 12:42:38,297 [DEBUG] wyze_sdk.api.client: access token not provided, attempting to login as @.com DEBUG:wyze_sdk.api.client:access token not provided, attempting to login as **@****.com 2024-01-07 12:42:38,297 [DEBUG] wyze_sdk.service.base: merging request-specific headers into session headers DEBUG:wyze_sdk.service.base:merging request-specific headers into session headers 2024-01-07 12:42:38,299 [DEBUG] wyze_sdk.service.base: unmodified prepared request DEBUG:wyze_sdk.service.base:unmodified prepared request 2024-01-07 12:42:38,299 [DEBUG] wyze_sdk.service.base: <PreparedRequest [POST]> DEBUG:wyze_sdk.service.base:<PreparedRequest [POST]> 2024-01-07 12:42:38,299 [INFO] wyze_sdk.service.base: requesting POST to https://auth-prod.api.wyze.com/api/user/login INFO:wyze_sdk.service.base:requesting POST to https://auth-prod.api.wyze.com/api/user/login 2024-01-07 12:42:38,299 [DEBUG] wyze_sdk.service.base: headers: {'user-agent': 'wyze-sdk-2.0.0', 'Accept-Encoding': 'gzip', 'Accept': '/', 'Connection': 'keep-alive', 'keyid': ****', 'apikey': '****', 'x-api-key': '**', 'appid': '9319141212m2ik', 'appinfo': 'wyze_android_2.19.14', 'phoneid': '526ff40a-91e0-47bf-8918-f3c2c66834f6', 'requestid': '96421709a5ee91f27bca392cdb08d8db', 'signature2': '386e8c25adb64fa926a7737a783fde82', 'Content-Length': '108', 'Content-Type': 'application/json'} DEBUG:wyze_sdk.service.base:headers: {'user-agent': 'wyze-sdk-2.0.0', 'Accept-Encoding': 'gzip', 'Accept': '/', 'Connection': 'keep-alive', 'keyid': '**', 'apikey': '*****', 'x-api-key': 'RckMFKbsds5p6QY3COEXc2ABwNTYY0q18ziEiSEm', 'appid': '9319141212m2ik', 'appinfo': 'wyze_android_2.19.14', 'phoneid': '526ff40a-91e0-47bf-8918-f3c2c66834f6', 'requestid': '96421709a5ee91f27bca392cdb08d8db', 'signature2': '386e8c25adb64fa926a7737a783fde82', 'Content-Length': '108', 'Content-Type': 'application/json'} 2024-01-07 12:42:38,299 [DEBUG] wyze_sdk.service.base: body: b'{"nonce":"1704660158298","email":"*@*.com","password":"**"}' DEBUG:wyze_sdk.service.base:body: b'{"nonce":"1704660158298","email":"*****@*****.com","password":"****"}' 2024-01-07 12:42:38,299 [DEBUG] wyze_sdk.service.base: settings: {'proxies': OrderedDict(), 'stream': False, 'verify': True, 'cert': None} DEBUG:wyze_sdk.service.base:settings: {'proxies': OrderedDict(), 'stream': False, 'verify': True, 'cert': None} DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): auth-prod.api.wyze.com:443 DEBUG:urllib3.connectionpool:https://auth-prod.api.wyze.com:443 "POST /api/user/login HTTP/1.1" 400 None Traceback (most recent call last): File "C:\Users\gkara\OneDrive\Desktop\Computer_Science\CS50p\wyze\wyze.py", line 20, in response = Client().login( ^^^^^^^^^^^^^^^ File "C:\Users\gkara\AppData\Local\Programs\Python\Python311\Lib\site-packages\wyze_sdk\api\client.py", line 184, in login response = self._auth_client().user_login( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\gkara\AppData\Local\Programs\Python\Python311\Lib\site-packages\wyze_sdk\service\auth_service.py", line 88, in user_login response = self.api_call( ^^^^^^^^^^^^^^ File "C:\Users\gkara\AppData\Local\Programs\Python\Python311\Lib\site-packages\wyze_sdk\service\auth_service.py", line 58, in api_call return super().api_call( ^^^^^^^^^^^^^^^^^ File "C:\Users\gkara\AppData\Local\Programs\Python\Python311\Lib\site-packages\wyze_sdk\service\base.py", line 347, in api_call return super().api_call( ^^^^^^^^^^^^^^^^^ File "C:\Users\gkara\AppData\Local\Programs\Python\Python311\Lib\site-packages\wyze_sdk\service\base.py", line 204, in api_call return self.do_post(url=api_url, headers=headers, payload=json, params=params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\gkara\AppData\Local\Programs\Python\Python311\Lib\site-packages\wyze_sdk\service\base.py", line 132, in do_post return self._do_request(client, req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\gkara\AppData\Local\Programs\Python\Python311\Lib\site-packages\wyze_sdk\service\base.py", line 106, in _do_request raise err File "C:\Users\gkara\AppData\Local\Programs\Python\Python311\Lib\site-packages\wyze_sdk\service\base.py", line 93, in _do_request response.raise_for_status() File "C:\Users\gkara\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\models.py", line 1021, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://auth-prod.api.wyze.com/api/user/login

shauntarves commented 10 months ago

That looks exactly like mine, except I see DEBUG:urllib3.connectionpool:https://auth-prod.api.wyze.com:443 "POST /api/user/login HTTP/1.1" 200 None instead of the 400 error you're getting. If I put in a knowingly bad password, I see the same error response you pasted above.

Can you please check/try two things:

  1. if your password has any special characters, please make sure they are properly escaped according to python's string escaping
  2. regenerate the API key on the wyze site or confirm that the one that was generated for you doesn't have characters like | or \ - these also throw off string escaping