# -*- coding: UTF-8 -*- import requests as req import json,sys,time,random #注册后一定要再点代表xxx授予管理员同意,否则outlook api无法调用 #以下空行不要删除,以便运行时插入机密 id_list2 = [1] secret_list2 = [1] config_list = {'每次轮数':6, '是否启动随机时间':'Y','延时范围起始':600,'结束':1200, '是否开启随机api顺序':'Y', '是否开启各api延时':'N','api延时范围开始':2,'api延时结束':5, '是否开启各账号延时':'Y','账号延时范围开始':60,'账号延时结束':120, '是否开启备用应用':'N','是否开启测试':'N'} num1 = [0]*len(id_list) path2=sys.path[0]+r'/config/randomapi.txt' path3=sys.path[0]+r'/config/buconfig.txt' rapi = {'1':r'https://graph.microsoft.com/v1.0/me/', '2':r'https://graph.microsoft.com/v1.0/users', '3':r'https://graph.microsoft.com/v1.0/me/people', '4':r'https://graph.microsoft.com/v1.0/groups', '5':r'https://graph.microsoft.com/v1.0/me/contacts', '6':r'https://graph.microsoft.com/v1.0/me/drive/root', '7':r'https://graph.microsoft.com/v1.0/me/drive/root/children', '8':r'https://graph.microsoft.com/v1.0/drive/root', '9':r'https://graph.microsoft.com/v1.0/me/drive', '10':r'https://graph.microsoft.com/v1.0/me/drive/recent', '11':r'https://graph.microsoft.com/v1.0/me/drive/sharedWithMe', '12':r'https://graph.microsoft.com/v1.0/me/calendars', '13':r'https://graph.microsoft.com/v1.0/me/events', '14':r'https://graph.microsoft.com/v1.0/sites/root', '15':r'https://graph.microsoft.com/v1.0/sites/root/sites', '16':r'https://graph.microsoft.com/v1.0/sites/root/drives', '17':r'https://graph.microsoft.com/v1.0/sites/root/columns', '18':r'https://graph.microsoft.com/v1.0/me/onenote/notebooks', '19':r'https://graph.microsoft.com/v1.0/me/onenote/sections', '20':r'https://graph.microsoft.com/v1.0/me/onenote/pages', '21':r'https://graph.microsoft.com/v1.0/me/messages', '22':r'https://graph.microsoft.com/v1.0/me/mailFolders', '23':r'https://graph.microsoft.com/v1.0/me/outlook/masterCategories', '24':r'https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/messages/delta', '25':r'https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messageRules', '26':r"https://graph.microsoft.com/v1.0/me/messages?$filter=importance eq 'high'", '27':r'https://graph.microsoft.com/v1.0/me/messages?$search="hello world"', '28':r'https://graph.microsoft.com/beta/me/messages?$select=internetMessageHeaders&$top', '29':r'https://api.powerbi.com/v1.0/myorg/apps'} rapi2 = {'1':r'https://graph.microsoft.com/v1.0/me/drive/root', '2':r'https://graph.microsoft.com/v1.0/me/drive', '3':r'https://graph.microsoft.com/v1.0/drive/root', '4':r'https://graph.microsoft.com/v1.0/users', '5':r'https://graph.microsoft.com/v1.0/me/messages', '6':r'https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messageRules', '7':r'https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/messages/delta', '8':r'https://graph.microsoft.com/v1.0/me/drive/root/children', '9':r'https://graph.microsoft.com/v1.0/me/mailFolders', '10':r'https://graph.microsoft.com/v1.0/me/outlook/masterCategories', '11':r'https://api.powerbi.com/v1.0/myorg/apps'} fc = open(path2, "r+") randapi = fc.read() fc.close() fh = open(path3, "r+") buconfig = fh.read() fh.close() randomapi = randapi.split(',') def gettoken(refresh_token,a): headers={'Content-Type':'application/x-www-form-urlencoded' } data={'grant_type': 'refresh_token', 'refresh_token': refresh_token, 'client_id':id_lists[a], 'client_secret':secret_lists[a], 'redirect_uri':'http://localhost:53682/' } html = req.post('https://login.microsoftonline.com/common/oauth2/v2.0/token',data=data,headers=headers) jsontxt = json.loads(html.text) refresh_token = jsontxt['refresh_token'] access_token = jsontxt['access_token'] return access_token def testapi(path,a,ls): fo = open(path, "r+") refresh_token = fo.read() fo.close() localtime = time.asctime( time.localtime(time.time()) ) access_token=gettoken(refresh_token,a) headers={ 'Authorization':access_token, 'Content-Type':'application/json' } print('账号 '+str(a)+'\n第 '+str(ls)+' 轮运行开始时间为 :', localtime) if config_list['是否开启随机api顺序'] == 'Y': print('总api数13个,请自行确认个数') for ra in range(14): rana = str(randomapi[ra]) try: if req.get(rapi[rana],headers=headers).status_code == 200: num1[a]+=1 print("账号"+str(a)+"的"+rana+"号api调用成功,所有api总成功"+str(num1[a])+'次') if config_list['是否开启各api延时'] != 'N': gg = random.randint(config_list['api延时范围开始'],config_list['api延时结束']) time.sleep(gg) except: print("pass") pass else: print('总api数10个,请自行确认个数') for ra in range(1,12): rana = str(ra) try: if req.get(rapi2[rana],headers=headers).status_code == 200: num1[a]+=1 print("账号"+str(a)+"的"+rana+"号api调用成功,所有api总成功"+str(num1[a])+'次') if config_list['是否开启各api延时'] != 'N': gg = random.randint(config_list['api延时范围开始'],config_list['api延时结束']) time.sleep(gg) except: print("pass") pass def testapi2(path,a,ls): fo = open(path, "r+") refresh_token = fo.read() fo.close() localtime = time.asctime( time.localtime(time.time()) ) access_token=gettoken(refresh_token,a) headers={ 'Authorization':access_token, 'Content-Type':'application/json' } print('账号 '+str(a)+' 备用应用\n第 '+str(ls)+' 轮运行开始时间为 :', localtime) if config_list['是否开启随机api顺序'] == 'Y': print('总api数13个,请自行确认个数') else: print('总api数10个,请自行确认个数') if config_list['是否开启随机api顺序'] == 'Y': for ra in range(14): rana = str(randomapi[ra]) try: if req.get(rapi[rana],headers=headers).status_code == 200: num1[a]+=1 print("账号"+str(a)+"备用的"+rana+"号api调用成功,所有api总成功"+str(num1[a])+'次') if config_list['是否开启各api延时'] != 'N': gg = random.randint(config_list['api延时范围开始'],config_list['api延时结束']) time.sleep(gg) except: print("pass") pass else: for ra in range(1,12): rana = str(ra) try: if req.get(rapi2[rana],headers=headers).status_code == 200: num1[a]+=1 print("账号"+str(a)+"备用的"+rana+"号api调用成功,所有api总成功"+str(num1[a])+'次') if config_list['是否开启各api延时'] != 'N': gg = random.randint(config_list['api延时范围开始'],config_list['api延时结束']) time.sleep(gg) except: print("pass") pass def main(): if config_list['是否启动随机时间'] == 'Y': for ls in range(config_list['每次轮数']): b=random.randint(config_list['延时范围起始'],config_list['结束']) time.sleep(b) for a in range(0, len(id_lists)): if config_list['是否开启各账号延时'] == 'Y': c = random.randint(config_list['账号延时范围开始'],config_list['账号延时结束']) time.sleep(c) path=sys.path[0]+r'/token/'+str(a)+'.txt' testapi(path,a,ls) else: for ls in range(config_list['每次轮数']): for a in range(0, len(id_lists)): if config_list['是否开启各账号延时'] == 'Y': c = random.randint(config_list['账号延时范围开始'],config_list['账号延时结束']) time.sleep(c) path=sys.path[0]+r'/token/'+str(a)+'.txt' testapi(path,a,ls) def main2(): if config_list['是否启动随机时间'] == 'Y': for ls in range(config_list['每次轮数']): b=random.randint(config_list['延时范围起始'],config_list['结束']) time.sleep(b) for a in range(0, len(id_lists)): if config_list['是否开启各账号延时'] == 'Y': c = random.randint(config_list['账号延时范围开始'],config_list['账号延时结束']) time.sleep(c) path=sys.path[0]+r'/backuptoken/'+str(a)+'.txt' testapi2(path,a,ls) else: for ls in range(config_list['每次轮数']): for a in range(0, len(id_lists)): if config_list['是否开启各账号延时'] == 'Y': c = random.randint(config_list['账号延时范围开始'],config_list['账号延时结束']) time.sleep(c) path=sys.path[0]+r'/backuptoken/'+str(a)+'.txt' testapi2(path,a,ls) if config_list['是否开启测试'] == 'Y': config_list = {'每次轮数':1,'是否启动随机时间':'N','延时范围起始':600,'结束':1200,'是否开启随机api顺序':'Y','是否开启各api延时':'N','api延时范围开始':2,'api延时结束':5,'是否开启各账号延时':'N','账号延时范围开始':60,'账号延时结束':120,'是否开启备用应用':'N','是否开启测试':'N'} id_lists=id_list secret_lists=secret_list main() if id_list2 != [1]: id_lists=id_list2 secret_lists=secret_list2 main2() else: if config_list['是否开启备用应用'] == 'Y': if buconfig == 'Y': id_lists=id_list secret_lists=secret_list main() else: if id_list2 == [1]: id_lists=id_list secret_lists=secret_list main() else: id_lists=id_list2 secret_lists=secret_list2 main2() else: id_lists=id_list secret_lists=secret_list main()