Last active
April 29, 2024 01:47
-
-
Save Konano/43f9090c9bf077825dcb4771ea5bfa04 to your computer and use it in GitHub Desktop.
利用华为的「寻找设备」功能定位手机
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
import http.cookiejar as HC | |
import re, json | |
import traceback | |
MOBILE = { | |
'deviceid': 'xxxxxx', | |
'hwid_cas_sid': 'xxxxxx', | |
'useraccount': 'xxxxxx', | |
'password': 'xxxxxx' | |
} | |
session = requests.session() | |
session.cookies = HC.LWPCookieJar(filename='cookies') | |
try: | |
session.cookies.load(ignore_discard=True) | |
except Exception: | |
pass | |
deviceParam = { | |
'deviceId': MOBILE['deviceid'], | |
'deviceType': 9, | |
} | |
def get_location(): | |
global executeTime | |
try: | |
try: | |
headers = {'Content-Type': 'application/json'} | |
res = session.post('https://cloud.huawei.com/mobile/locate', headers=headers, data=json.dumps(deviceParam), timeout=(5,10)) | |
assert res.text[:1] == '{' | |
print(res.json()) | |
res = session.post('https://cloud.huawei.com/mobile/queryLocateResult', headers=headers, data=json.dumps(deviceParam), timeout=(5,10)) | |
assert res.text[:1] == '{' | |
mobileInfo = res.json() | |
print(mobileInfo) | |
assert mobileInfo['resultCode'] == '0' | |
except AssertionError: | |
print(traceback.format_exc()) | |
headers = { | |
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', | |
} | |
cookies = { | |
'hwid_cas_sid': MOBILE['hwid_cas_sid'], | |
} | |
params = { | |
'service': 'https://cloud.huawei.com:443/others/login.action', | |
'loginChannel': 1000002, | |
'reqClientType': 1, | |
'userAccount': int(MOBILE['useraccount']), | |
'password': MOBILE['password'], | |
'lowLogin': True, | |
} | |
res = session.post('https://id1.cloud.huawei.com/CAS/IDM_W/ajaxHandler/remoteLogin', headers=headers, cookies=cookies, params=params, timeout=(5,10)) | |
print(res.text) | |
res = session.get(res.json()['callbackURL'], timeout=(5,10)) | |
print(res.url) | |
headers = { | |
'Interfaceversion': 'v3', | |
# 'Fromloginauth': 'false', | |
'Content-Type': 'application/x-www-form-urlencoded' | |
} | |
data = re.findall(r"authorize\?(.*)$", res.url)[0] | |
print(data) | |
res = session.post('https://oauth-login.cloud.huawei.com/oauth2/ajax/getLoginWay', data=data, headers=headers, timeout=(5,10)) | |
print(res.json()) | |
res = session.get(res.json()['loginInteractInfo']['cas']['casLoginRedirectUrl'], timeout=(5,10)) | |
data = re.findall(r"loginCallback\?(.*)$", res.url)[0] | |
res = session.post('https://oauth-login.cloud.huawei.com/oauth2/ajax/login', data=data, headers=headers, timeout=(5,10)) | |
res = session.get(res.json()['code'], timeout=(5,10)) | |
headers = {'Content-Type': 'application/json'} | |
res = session.post('https://cloud.huawei.com/mobile/locate', headers=headers, data=json.dumps(deviceParam), timeout=(5,10)) | |
assert res.text[:1] == '{' | |
print(res.json()) | |
res = session.post('https://cloud.huawei.com/mobile/queryLocateResult', headers=headers, data=json.dumps(deviceParam), timeout=(5,10)) | |
assert res.text[:1] == '{' | |
mobileInfo = res.json() | |
print(mobileInfo) | |
assert mobileInfo['resultCode'] == '0' | |
session.cookies.save(ignore_discard=True) | |
for k0 in mobileInfo.keys(): | |
if type(mobileInfo[k0]).__name__ == 'str' and mobileInfo[k0][:1] == '{': | |
mobileInfo[k0] = json.loads(mobileInfo[k0]) | |
for k1 in mobileInfo[k0].keys(): | |
if type(mobileInfo[k0][k1]).__name__ == 'str' and mobileInfo[k0][k1][:1] == '{': | |
mobileInfo[k0][k1] = json.loads(mobileInfo[k0][k1]) | |
print(json.dumps(mobileInfo, sort_keys=True)) | |
lat = mobileInfo['info']['latitude_WGS'] | |
lng = mobileInfo['info']['longitude_WGS'] | |
print(lat, lng) | |
except requests.exceptions.RequestException: | |
print('Network timeout') | |
except Exception as e: | |
print(e) | |
print(traceback.format_exc()) | |
get_location() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
据反馈,hwid_cas_sid 不是必选项。