- 新增websocket客户端和服务端实现 - 添加图片压缩工具和快速压缩脚本 - 实现学生信息处理相关API - 添加MQTT客户端和消息处理功能 - 更新.gitignore忽略更多文件类型 - 添加数据库操作工具和示例 - 实现多个测试脚本和工具类
24 KiB
24 KiB
In [1]:
from requests import get,post
import time
ip = "http://band.hxzhxy.cn"
param = {
"username": "tangchao",
"password": "123456a",
"client_id": "client",
"grant_type": "password",
"client_secret": "123456",
}
data = get(url=f"http://band.hxzhxy.cn/oauth/token?username=zhongwei&password=123456a&client_id=client&grant_type=password&client_secret=123456").json()
token = data["access_token"]
header = {
"content-type": "application/json",
"authorization": f"Bearer {token}",
}In [2]:
data = get(f"https://band.hxzhxy.cn/door/lock/listLockPage?teamId=119&pageSize=100&pageNumber=0&value=&areaId=&tierId=®ionId=&bindType=&lockName=&type=2&mainTypeId=&sizeType=&lockType=&access_token={token}").json()In [3]:
import timeIn [4]:
serialNos=['3478767249']In [6]:
for item in data["data"]["content"]:
addAdminBand =",".join(serialNos)
a =post("https://band.hxzhxy.cn/door/accredit/sendNews",json={
"startTime":"25082114","endTime":"35051814","adminType":"55","type":"01","time":[1761874564434,4097093791000],"accountIp":"183.220.92.213","accountName":"183.220.92.213","lockNo":item["lockNo"],"serialNo":item["serialNo"],"addAdminBand":"","addUserBand":"","removeBand":addAdminBand,"doorAccreditIds":""
},headers=header).text
print(a)
time.sleep(1)
{"success":false,"msg":"Index: 0, Size: 0","code":10000,"data":null}
{"success":false,"msg":"Index: 0, Size: 0","code":10000,"data":null}
{"success":false,"msg":"Index: 0, Size: 0","code":10000,"data":null}
{"success":false,"msg":"Index: 0, Size: 0","code":10000,"data":null}
[1;31m---------------------------------------------------------------------------[0m [1;31mKeyboardInterrupt[0m Traceback (most recent call last) Cell [1;32mIn[6], line 3[0m [0;32m 1[0m [38;5;28;01mfor[39;00m item [38;5;129;01min[39;00m data[[38;5;124m"[39m[38;5;124mdata[39m[38;5;124m"[39m][[38;5;124m"[39m[38;5;124mcontent[39m[38;5;124m"[39m]: [0;32m 2[0m addAdminBand [38;5;241m=[39m[38;5;124m"[39m[38;5;124m,[39m[38;5;124m"[39m[38;5;241m.[39mjoin(serialNos) [1;32m----> 3[0m a [38;5;241m=[39mpost([38;5;124m"[39m[38;5;124mhttps://band.hxzhxy.cn/door/accredit/sendNews[39m[38;5;124m"[39m,json[38;5;241m=[39m{ [0;32m 4[0m [38;5;124m"[39m[38;5;124mstartTime[39m[38;5;124m"[39m:[38;5;124m"[39m[38;5;124m25082114[39m[38;5;124m"[39m,[38;5;124m"[39m[38;5;124mendTime[39m[38;5;124m"[39m:[38;5;124m"[39m[38;5;124m35051814[39m[38;5;124m"[39m,[38;5;124m"[39m[38;5;124madminType[39m[38;5;124m"[39m:[38;5;124m"[39m[38;5;124m55[39m[38;5;124m"[39m,[38;5;124m"[39m[38;5;124mtype[39m[38;5;124m"[39m:[38;5;124m"[39m[38;5;124m01[39m[38;5;124m"[39m,[38;5;124m"[39m[38;5;124mtime[39m[38;5;124m"[39m:[[38;5;241m1761874564434[39m,[38;5;241m4097093791000[39m],[38;5;124m"[39m[38;5;124maccountIp[39m[38;5;124m"[39m:[38;5;124m"[39m[38;5;124m183.220.92.213[39m[38;5;124m"[39m,[38;5;124m"[39m[38;5;124maccountName[39m[38;5;124m"[39m:[38;5;124m"[39m[38;5;124m183.220.92.213[39m[38;5;124m"[39m,[38;5;124m"[39m[38;5;124mlockNo[39m[38;5;124m"[39m:item[[38;5;124m"[39m[38;5;124mlockNo[39m[38;5;124m"[39m],[38;5;124m"[39m[38;5;124mserialNo[39m[38;5;124m"[39m:item[[38;5;124m"[39m[38;5;124mserialNo[39m[38;5;124m"[39m],[38;5;124m"[39m[38;5;124maddAdminBand[39m[38;5;124m"[39m:[38;5;124m"[39m[38;5;124m"[39m,[38;5;124m"[39m[38;5;124maddUserBand[39m[38;5;124m"[39m:[38;5;124m"[39m[38;5;124m"[39m,[38;5;124m"[39m[38;5;124mremoveBand[39m[38;5;124m"[39m:addAdminBand,[38;5;124m"[39m[38;5;124mdoorAccreditIds[39m[38;5;124m"[39m:[38;5;124m"[39m[38;5;124m"[39m [0;32m 5[0m },headers[38;5;241m=[39mheader)[38;5;241m.[39mtext [0;32m 6[0m [38;5;28mprint[39m(a) [0;32m 7[0m time[38;5;241m.[39msleep([38;5;241m1[39m) File [1;32md:\Anaconda3\Lib\site-packages\requests\api.py:115[0m, in [0;36mpost[1;34m(url, data, json, **kwargs)[0m [0;32m 103[0m [38;5;28;01mdef[39;00m [38;5;21mpost[39m(url, data[38;5;241m=[39m[38;5;28;01mNone[39;00m, json[38;5;241m=[39m[38;5;28;01mNone[39;00m, [38;5;241m*[39m[38;5;241m*[39mkwargs): [0;32m 104[0m [38;5;250m [39m[38;5;124mr[39m[38;5;124;03m"""Sends a POST request.[39;00m [0;32m 105[0m [0;32m 106[0m [38;5;124;03m :param url: URL for the new :class:`Request` object.[39;00m [1;32m (...)[0m [0;32m 112[0m [38;5;124;03m :rtype: requests.Response[39;00m [0;32m 113[0m [38;5;124;03m """[39;00m [1;32m--> 115[0m [38;5;28;01mreturn[39;00m request([38;5;124m"[39m[38;5;124mpost[39m[38;5;124m"[39m, url, data[38;5;241m=[39mdata, json[38;5;241m=[39mjson, [38;5;241m*[39m[38;5;241m*[39mkwargs) File [1;32md:\Anaconda3\Lib\site-packages\requests\api.py:59[0m, in [0;36mrequest[1;34m(method, url, **kwargs)[0m [0;32m 55[0m [38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we[39;00m [0;32m 56[0m [38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some[39;00m [0;32m 57[0m [38;5;66;03m# cases, and look like a memory leak in others.[39;00m [0;32m 58[0m [38;5;28;01mwith[39;00m sessions[38;5;241m.[39mSession() [38;5;28;01mas[39;00m session: [1;32m---> 59[0m [38;5;28;01mreturn[39;00m session[38;5;241m.[39mrequest(method[38;5;241m=[39mmethod, url[38;5;241m=[39murl, [38;5;241m*[39m[38;5;241m*[39mkwargs) File [1;32md:\Anaconda3\Lib\site-packages\requests\sessions.py:589[0m, in [0;36mSession.request[1;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)[0m [0;32m 584[0m send_kwargs [38;5;241m=[39m { [0;32m 585[0m [38;5;124m"[39m[38;5;124mtimeout[39m[38;5;124m"[39m: timeout, [0;32m 586[0m [38;5;124m"[39m[38;5;124mallow_redirects[39m[38;5;124m"[39m: allow_redirects, [0;32m 587[0m } [0;32m 588[0m send_kwargs[38;5;241m.[39mupdate(settings) [1;32m--> 589[0m resp [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39msend(prep, [38;5;241m*[39m[38;5;241m*[39msend_kwargs) [0;32m 591[0m [38;5;28;01mreturn[39;00m resp File [1;32md:\Anaconda3\Lib\site-packages\requests\sessions.py:703[0m, in [0;36mSession.send[1;34m(self, request, **kwargs)[0m [0;32m 700[0m start [38;5;241m=[39m preferred_clock() [0;32m 702[0m [38;5;66;03m# Send the request[39;00m [1;32m--> 703[0m r [38;5;241m=[39m adapter[38;5;241m.[39msend(request, [38;5;241m*[39m[38;5;241m*[39mkwargs) [0;32m 705[0m [38;5;66;03m# Total elapsed time of the request (approximately)[39;00m [0;32m 706[0m elapsed [38;5;241m=[39m preferred_clock() [38;5;241m-[39m start File [1;32md:\Anaconda3\Lib\site-packages\requests\adapters.py:589[0m, in [0;36mHTTPAdapter.send[1;34m(self, request, stream, timeout, verify, cert, proxies)[0m [0;32m 586[0m timeout [38;5;241m=[39m TimeoutSauce(connect[38;5;241m=[39mtimeout, read[38;5;241m=[39mtimeout) [0;32m 588[0m [38;5;28;01mtry[39;00m: [1;32m--> 589[0m resp [38;5;241m=[39m conn[38;5;241m.[39murlopen( [0;32m 590[0m method[38;5;241m=[39mrequest[38;5;241m.[39mmethod, [0;32m 591[0m url[38;5;241m=[39murl, [0;32m 592[0m body[38;5;241m=[39mrequest[38;5;241m.[39mbody, [0;32m 593[0m headers[38;5;241m=[39mrequest[38;5;241m.[39mheaders, [0;32m 594[0m redirect[38;5;241m=[39m[38;5;28;01mFalse[39;00m, [0;32m 595[0m assert_same_host[38;5;241m=[39m[38;5;28;01mFalse[39;00m, [0;32m 596[0m preload_content[38;5;241m=[39m[38;5;28;01mFalse[39;00m, [0;32m 597[0m decode_content[38;5;241m=[39m[38;5;28;01mFalse[39;00m, [0;32m 598[0m retries[38;5;241m=[39m[38;5;28mself[39m[38;5;241m.[39mmax_retries, [0;32m 599[0m timeout[38;5;241m=[39mtimeout, [0;32m 600[0m chunked[38;5;241m=[39mchunked, [0;32m 601[0m ) [0;32m 603[0m [38;5;28;01mexcept[39;00m (ProtocolError, [38;5;167;01mOSError[39;00m) [38;5;28;01mas[39;00m err: [0;32m 604[0m [38;5;28;01mraise[39;00m [38;5;167;01mConnectionError[39;00m(err, request[38;5;241m=[39mrequest) File [1;32md:\Anaconda3\Lib\site-packages\urllib3\connectionpool.py:787[0m, in [0;36mHTTPConnectionPool.urlopen[1;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)[0m [0;32m 784[0m response_conn [38;5;241m=[39m conn [38;5;28;01mif[39;00m [38;5;129;01mnot[39;00m release_conn [38;5;28;01melse[39;00m [38;5;28;01mNone[39;00m [0;32m 786[0m [38;5;66;03m# Make the request on the HTTPConnection object[39;00m [1;32m--> 787[0m response [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39m_make_request( [0;32m 788[0m conn, [0;32m 789[0m method, [0;32m 790[0m url, [0;32m 791[0m timeout[38;5;241m=[39mtimeout_obj, [0;32m 792[0m body[38;5;241m=[39mbody, [0;32m 793[0m headers[38;5;241m=[39mheaders, [0;32m 794[0m chunked[38;5;241m=[39mchunked, [0;32m 795[0m retries[38;5;241m=[39mretries, [0;32m 796[0m response_conn[38;5;241m=[39mresponse_conn, [0;32m 797[0m preload_content[38;5;241m=[39mpreload_content, [0;32m 798[0m decode_content[38;5;241m=[39mdecode_content, [0;32m 799[0m [38;5;241m*[39m[38;5;241m*[39mresponse_kw, [0;32m 800[0m ) [0;32m 802[0m [38;5;66;03m# Everything went great![39;00m [0;32m 803[0m clean_exit [38;5;241m=[39m [38;5;28;01mTrue[39;00m File [1;32md:\Anaconda3\Lib\site-packages\urllib3\connectionpool.py:464[0m, in [0;36mHTTPConnectionPool._make_request[1;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)[0m [0;32m 461[0m [38;5;28;01mtry[39;00m: [0;32m 462[0m [38;5;66;03m# Trigger any extra validation we need to do.[39;00m [0;32m 463[0m [38;5;28;01mtry[39;00m: [1;32m--> 464[0m [38;5;28mself[39m[38;5;241m.[39m_validate_conn(conn) [0;32m 465[0m [38;5;28;01mexcept[39;00m (SocketTimeout, BaseSSLError) [38;5;28;01mas[39;00m e: [0;32m 466[0m [38;5;28mself[39m[38;5;241m.[39m_raise_timeout(err[38;5;241m=[39me, url[38;5;241m=[39murl, timeout_value[38;5;241m=[39mconn[38;5;241m.[39mtimeout) File [1;32md:\Anaconda3\Lib\site-packages\urllib3\connectionpool.py:1093[0m, in [0;36mHTTPSConnectionPool._validate_conn[1;34m(self, conn)[0m [0;32m 1091[0m [38;5;66;03m# Force connect early to allow us to validate the connection.[39;00m [0;32m 1092[0m [38;5;28;01mif[39;00m conn[38;5;241m.[39mis_closed: [1;32m-> 1093[0m conn[38;5;241m.[39mconnect() [0;32m 1095[0m [38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791[39;00m [0;32m 1096[0m [38;5;28;01mif[39;00m [38;5;129;01mnot[39;00m conn[38;5;241m.[39mis_verified [38;5;129;01mand[39;00m [38;5;129;01mnot[39;00m conn[38;5;241m.[39mproxy_is_verified: File [1;32md:\Anaconda3\Lib\site-packages\urllib3\connection.py:753[0m, in [0;36mHTTPSConnection.connect[1;34m(self)[0m [0;32m 751[0m [38;5;28;01mtry[39;00m: [0;32m 752[0m sock: socket[38;5;241m.[39msocket [38;5;241m|[39m ssl[38;5;241m.[39mSSLSocket [1;32m--> 753[0m [38;5;28mself[39m[38;5;241m.[39msock [38;5;241m=[39m sock [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39m_new_conn() [0;32m 754[0m server_hostname: [38;5;28mstr[39m [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39mhost [0;32m 755[0m tls_in_tls [38;5;241m=[39m [38;5;28;01mFalse[39;00m File [1;32md:\Anaconda3\Lib\site-packages\urllib3\connection.py:198[0m, in [0;36mHTTPConnection._new_conn[1;34m(self)[0m [0;32m 193[0m [38;5;250m[39m[38;5;124;03m"""Establish a socket connection and set nodelay settings on it.[39;00m [0;32m 194[0m [0;32m 195[0m [38;5;124;03m:return: New socket connection.[39;00m [0;32m 196[0m [38;5;124;03m"""[39;00m [0;32m 197[0m [38;5;28;01mtry[39;00m: [1;32m--> 198[0m sock [38;5;241m=[39m connection[38;5;241m.[39mcreate_connection( [0;32m 199[0m ([38;5;28mself[39m[38;5;241m.[39m_dns_host, [38;5;28mself[39m[38;5;241m.[39mport), [0;32m 200[0m [38;5;28mself[39m[38;5;241m.[39mtimeout, [0;32m 201[0m source_address[38;5;241m=[39m[38;5;28mself[39m[38;5;241m.[39msource_address, [0;32m 202[0m socket_options[38;5;241m=[39m[38;5;28mself[39m[38;5;241m.[39msocket_options, [0;32m 203[0m ) [0;32m 204[0m [38;5;28;01mexcept[39;00m socket[38;5;241m.[39mgaierror [38;5;28;01mas[39;00m e: [0;32m 205[0m [38;5;28;01mraise[39;00m NameResolutionError([38;5;28mself[39m[38;5;241m.[39mhost, [38;5;28mself[39m, e) [38;5;28;01mfrom[39;00m [38;5;21;01me[39;00m File [1;32md:\Anaconda3\Lib\site-packages\urllib3\util\connection.py:73[0m, in [0;36mcreate_connection[1;34m(address, timeout, source_address, socket_options)[0m [0;32m 71[0m [38;5;28;01mif[39;00m source_address: [0;32m 72[0m sock[38;5;241m.[39mbind(source_address) [1;32m---> 73[0m sock[38;5;241m.[39mconnect(sa) [0;32m 74[0m [38;5;66;03m# Break explicitly a reference cycle[39;00m [0;32m 75[0m err [38;5;241m=[39m [38;5;28;01mNone[39;00m [1;31mKeyboardInterrupt[0m:
In [ ]:
import tqdmIn [ ]:
data = get(f"https://band.hxzhxy.cn/door/lock/listLockPage?teamId=119&pageSize=60&pageNumber=0&value=&areaId=&tierId=®ionId=&bindType=&lockName=&type=2&mainTypeId=&sizeType=&lockType=&access_token={token}").json()
with tqdm.tqdm(total=len(data["data"]["content"])) as pbar:
for item in data["data"]["content"]:
if item["password"] == "12345687" or item["password"]==None:
pbar.update(1)
continue
post("https://band.hxzhxy.cn/door/password/send",json={"lockNos":item["lockNo"],"serialNos":item["serialNo"],"password":"12345687","type":"04","typeSend":"0","accountIp":"183.220.91.181","accountName":"183.220.91.181","account":"5789"},headers=header)
time.sleep(7)
pbar.update(1)In [ ]:
data = get(f"https://band.hxzhxy.cn/door/lock/listLockPage?teamId=119&pageSize=60&pageNumber=0&value=&areaId=&tierId=®ionId=&bindType=&lockName=&type=2&mainTypeId=&sizeType=&lockType=&access_token={token}").json()
for item in data["data"]["content"]:
if item["password"] != "12345687" and item["password"]!=None:
print(item)
print(item['password'])In [ ]:
len("Xpaotongshutongwenzhongxue971001")In [37]:
serialNosOut [37]:
['4007516707', '4009525491', '4004683395', '4008811955', '4008924883', '4009224243', '4009213507', '4009187555', '4007743635', '4009523651', '4008270787', '4009482275', '0276930835', '4009509123', '4007526915', '4007516643', '4008464659', '4009443907', '4009203219', '4009209379', '3478812113', '3470473985']
In [43]:
#权限提取
count = 0
for item in data["data"]["content"]:
teacher = get(f"https://band.hxzhxy.cn/door/admin/selectAllTeacherAndSerialNew?teamId=119&lockNo={item['lockNo']}&access_token=2ca5ff6c-24a0-4231-98e2-fec9e38c5a38").json()["data"]["userTea"]
flag = True
for i in teacher:
if '物业' in i["teaName"]:
flag = False
break
if flag:
print(item["lockName"])
count+=1
addAdminBand =",".join(serialNos)
a =post("https://band.hxzhxy.cn/door/accredit/sendNews",json={
"startTime":"25082114","endTime":"35051814","adminType":"55","type":"01","time":[1755756984314,2071380076000],"accountIp":"183.220.92.213","accountName":"183.220.92.213","lockNo":item["lockNo"],"serialNo":item["serialNo"],"addAdminBand":"","addUserBand":addAdminBand,"removeBand":"","doorAccreditIds":""
},headers=header).text
time.sleep(10)
print(count)0
In [ ]:
In [ ]: