python+读取前端所有的js文件,从而获取前端调取后端的所有接口

news/2024/10/18 5:46:29/

读取前端所有的js文件,从而获取前端调取后端的所有接口,发送请求

import json
import os
import reimport pymysql
import requestsclass UrlFetcher:def __init__(self, db_config, host, headers):self.db_config = db_config  # 数据库配置self.host = host  # 请求的hostself.headers = headers  # 请求头def fetch_urls(self, url_sources):"""从URL源获取URL列表"""urls = []for source in url_sources:# 如果是数据库,则从数据库中获取if source['type'] == 'db':db = pymysql.Connect(**source['config'])cur = db.cursor(pymysql.cursors.DictCursor)sql = source['query']cur.execute(sql)urls.extend(list(map(lambda value: value['menu_url'], cur.fetchall())))cur.close()db.close()# 如果是文件夹,从JS文件中提取URLelif source['type'] == 'folder':dir_path = source['path']url_pattern = source['pattern']urls.extend(self.extract_urls_from_js_files(dir_path, url_pattern))# 如果是单个URL,直接加入列表elif source['type'] == 'url':urls.append(source['url'])return urlsdef send_request(self, url):"""发送请求获取响应"""session = requests.session()  # 创建session对象response = session.post(self.host + url, data={}, headers=self.headers)  # 发送post请求session.close()  # 关闭sessionreturn responsedef write_response_to_file(self, data):"""将响应写入文件追加换行写入"""try:with open('files/output.txt', 'a', encoding='utf-8', buffering=1) as file:file.write("\n")file.writelines(str(data['id']) + data['menu_url'] + '   ' + json.dumps(data['response'], ensure_ascii=False))except Exception as e:print(e)def process_urls(self, url_sources):"""处理URL列表"""urls = self.fetch_urls(url_sources)  # 获取URL列表with open('files/output.txt', 'w') as f:f.truncate(0)  # 清空文件内容for menu_url in urls:response = self.send_request(menu_url)  # 发送请求try:response_json = response.json()  # 将响应转为jsonid = response_json['id']print(f'结果值id{id}为', response_json)self.write_response_to_file({'id': id, 'menu_url': menu_url, 'response': response_json})  # 将结果写入文件except Exception as e:print(f'URL {menu_url} 的结果无法解析为json', response.text)def extract_urls_from_js_files(self, dir_path, url_pattern):"""从JS文件中提取URL"""urls = []# 遍历目录下的所有文件for file_name in os.listdir(dir_path):# 如果是js文件,读取文件内容并获取URLif os.path.splitext(file_name)[-1] == '.js':file_path = os.path.join(dir_path, file_name)with open(file_path, 'r', encoding='utf-8') as f:data = f.read()urls_in_file = re.findall(url_pattern, data)  # 查找URLurls.extend(list(map(lambda url: url.strip(), urls_in_file)))return urlsdef run(self, url_sources):"""运行模块"""self.process_urls(url_sources)  # 处理URL列表if __name__ == '__main__':db_config = {'host': 'rncs.com','port': 3306,'user': 'yai','password': '456','db': 'test','charset': 'utf8'}headers = {"Content-Type": "application/json;charset=UTF-8", "token": 'D237F54160BF73ED489871C8996BB646'}url_sources = [{'type': 'url', 'url': 'http://test.com/api/abc'},{'type': 'db', 'config': db_config, 'query': 'SELECT menu_url FROM yy_menu_url WHERE menu_pid != 0'},{'type': 'folder', 'path': 'files', 'pattern': r"url:\s*'(.+?)'"},]url_fetcher = UrlFetcher(db_config, 'http://test.com', headers)url_fetcher.run(url_sources)

http://www.ppmy.cn/news/662896.html

相关文章

Android的WIFI和以太网连接状态

在一些 Android 设备上同时具有以太网和Wifi网络连接 我们可以使用 ConnectivityManager 类来判断设备的网络状态。以下是一个 Kotlin 示例,说明了如何检查网络连接状态以及连接类型(例如 Wi-Fi 或移动数据): 首先,确…

任正非:发展芯片,光砸钱不行,还要砸人

30多年前,硅谷在半导体芯片领域(当时主要是半导体存储占据主流)的发展模式主要是: 通过风投注入资金,科创企业获得注资后,进行持续的技术创新获得市场,提升公司估值,然后上市&#…

linux中安装openoffice

linux中安装openoffice 原创衬衫码农 最后发布于2019-04-23 13:50:44 阅读数 3425 收藏 展开 1.下载tar.gz包。下载地址:http://www.openoffice.org/zh-cn/ (需要下载rpm格式的) 2.通过xftp上传到linux中。我的目录在/opt/openoffice中 3.解压文件:tar…

日本现代数学发展历程及其启示

前不久,日本数学家柏原正树在第28界国际数学家大会上荣获数学最高终身成就奖“陈省身奖”。而此届大会主席也恰巧是日本著名数学家森重文,他曾于1990年荣获菲尔兹奖。于是,日本数学再一次成为了焦点。时至今日,日本数学家共获得三…

集合遍历4

集合 一、集合的体系结构: 二、Collection集合的基础知识 1.所在包:java.util.Collection 2.public interface Collection extends Iterable 3.Collection是单列集合的顶层接口。 它表示一组对象,这些对象也称为Collection的元素 JDK不提供此…

Three.js无限3D时空穿梭特效

可能每个人的童年都有个时空穿梭梦,印象深刻的是第一次看《机器猫》,主角康夫卧室的抽屉就是时空隧道的入口,跳进隧道的那一刻,时间浮光掠影般从身边流过,仿佛进入了异世界。 这次我们用three.js实现一个3d隧道穿梭效…

java学习笔记: 基础知识: day11  对象也可以比较大小、集合、List集合、常见的数据结构、集合的工具类Collections

day11 java学习笔记: 基础知识: day11 对象也可以比较大小、集合、List集合、常见的数据结构、集合的工具类Collections 一、对象也可以比较大小 如果想比较两个对象的大小,可以通过实现Comparable接口,重写compareTo方法。 接口,比较器&…

python爬虫爬取豆瓣电影为啥内容有缺失-Python爬虫之抓取豆瓣影评数据

----------写excel开始---------- ----------获取第1个影评开始----------标题: 《权力的游戏》S5E8:凛冬已至,凡人皆死 作者: 地瓜 影片: 权力的游戏 第五季 影评: 本篇多剧透、多推测、少评论 看过这一集的人,一定会被画风的急转直下惊得目瞪口呆。习惯了HBO《权…