怎么做展示型网站/培训总结精辟句子
看了很多关于小程序抓包的 废话不多说直接演示
一、小程序抓包
1.所需要的工具 官网下载即可:
https://www.charlesproxy.com/latest-release/download.do
我这里用的 Charles-proxy-4.6.6-win64
需要中文破解参考
https://www.jianshu.com/p/4d67dbbf2f6a
2、破解使用,在线生成 注册名和注册秘钥
工具地址:https://www.zzzmode.com/mytools/charles/
用工具生成 随意输入名称
下载完成点开后 点击help菜单的register charles 将生成的名称和密钥输入
3、安装https证书
点击help菜单 点击SSL proxying 点击install charles Root Certificate
下载完成双击安装到本地计算机
4、设置HTTPS端口
菜单栏 Proxy -> SSL Proxying Settings 打开 SSL Proxying Settings配置面板
我这里抓包的是次神的游戏小程序 我这里直接填了相关的主域名 抓所有域名可以用 * 号代替
勾选上windows proxy
完成后可以启动小程序
接口数据
{"track": "133:127:315501608:1721726225","result": {"code": 0,"userId": 67759270,"appId": 9999,"purl": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKqzZkhQUUedrdnsA1G94gQqU6Jz7kcgufiaSiaZHfBuibMjNBhT3Hodxal2yMEdvPkau6LEcaiciaMVJg/132","authorCode": "eyJ1aWQiOiA2Nzc1OTI3MCwgInVuYW1lIjogIlx1N2IxOVx1NGViYSIsICJlbWFpbCI6ICIiLCAiY29pbiI6IDAsICJhcHBJZCI6IDk5OTksICJjbGllbnRJZCI6ICJINV81LjJfd2VpeGluLndlaXhpbi4wLWhhbGwyMDU1MS53ZWl4aW4uZ3Vhbmd6angyIiwgImNsaWVudElwIjogIjExMy4xMDYuODcuMTg2IiwgInV0b2tlbiI6ICIyMDI0LTA3LTIzIDA4OjE0OjA3LjExMDc2NSIsICJ1dGltZSI6ICIyMDI0LTA3LTIzIDE3OjE3OjA1LjkzNTc1MyIsICJzaWduIjogIjc1ZjIwNjYzY2VhYzEyY2QyY2M3MjJiN2QwMzY5OGIwIiwgIm1fc2lnbiI6ICJlZGMyMzFjNDQyZDQxMzg3ZDU3OTA0ZWRlNGY2MzhjYiJ9","userName": "\u7b19\u4eba","userEmail": "","isCreate": 0,"userType": 4,"snsId": "wxapp:oHqqn5CpW03iudjGxJbcBrtS0klg","userPwd": "ef29642cd1afc49accf5cfd1a26e1cc5e3c7fdd6153522db9c0384247e383dec","mobile": "","changePwdCount": 0,"log_report": 0,"exception_report": 0,"360.vip": 0,"connectTimeOut": 35,"heartBeat": 6,"tcpsrv": {"ip": "133-slm-wss-online.tytuyoo.com","port": 6001,"wsport": 443},"logclient": {"logreporturl": "","loguploadurl": ""},"authInfo": "{\"authcode\": \"eyJ1aWQiOiA2Nzc1OTI3MCwgInVuYW1lIjogIlx1N2IxOVx1NGViYSIsICJlbWFpbCI6ICIiLCAiY29pbiI6IDAsICJhcHBJZCI6IDk5OTksICJjbGllbnRJZCI6ICJINV81LjJfd2VpeGluLndlaXhpbi4wLWhhbGwyMDU1MS53ZWl4aW4uZ3Vhbmd6angyIiwgImNsaWVudElwIjogIjExMy4xMDYuODcuMTg2IiwgInV0b2tlbiI6ICIyMDI0LTA3LTIzIDA4OjE0OjA3LjExMDc2NSIsICJ1dGltZSI6ICIyMDI0LTA3LTIzIDE3OjE3OjA1LjkzNTc1MyIsICJzaWduIjogIjc1ZjIwNjYzY2VhYzEyY2QyY2M3MjJiN2QwMzY5OGIwIiwgIm1fc2lnbiI6ICJlZGMyMzFjNDQyZDQxMzg3ZDU3OTA0ZWRlNGY2MzhjYiJ9\", \"account\": \"\", \"uid\": 67759270, \"usercode\": \"\"}","token": "f80ae534-e617-4049-8ee8-1ab550082cd7","jwttoken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjAifQ.eyJzb21lIjp7InVpZCI6Njc3NTkyNzAsImNsaWVudElkIjoiSDVfNS4yX3dlaXhpbi53ZWl4aW4uMC1oYWxsMjA1NT}
}
这里已经正常捉包了
但是这里发现 所有数据传输都走的websocket连接
这里我们想修改数据 只能截取会话模拟客户端和服务端的交互
二、mitmproxy监听会话数据修改
1、mitmproxy安装
pip install mitmproxy
2、编写修改脚本
这里的数据都是二进制流处理 我加上的数据都是基础属性
from mitmproxy import ctx, websocketimport logging
import warnings# 忽略所有 UserWarning 警告
warnings.filterwarnings("ignore", category=UserWarning)# 1、设置全局的日志格式和级别
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(name)s - %(message)s',datefmt='%m/%d/%Y %H:%M:%S',level=logging.INFO)# 2、获取logger (给日志器起个名字 "__name__")
logger = logging.getLogger(__name__)# __name__内置变量模块名称,轻松地识别出哪个模块产生了哪些日志消息(主程序模块)# 3、创建文件处理器,指定日志文件和日志级别(局部)---文件输出FileHandle(输出到指定文件)
file_handler = logging.FileHandler('app.log') #指定日志文件名application.log,默认在当前目录下创建
file_handler.setLevel(logging.INFO) # 设置日志级别(只输出对应级别INFO的日志信息)
# 设置日志格式
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s', '%m/%d/%Y %H:%M:%S'))# 4、添加文件处理器到logger
logger.addHandler(file_handler)# 训练模型的代码
epoch = 7
# 记录日志信息
logger.info("Get better performance at epoch {}".format(epoch))class WebSocketModifier:def websocket_message(self, flow: websocket.WebSocketFlow):try:message = flow.messages[-1]if message.from_client:logger.info("客户端发送数据--------------------------------")# 检查消息类型if message.type == 2:# 打印原始客户端二进制消息logger.info(f"Original client binary message: {message.content}")# csc = b'\n\tWSPingReq'if c in message.content:# 构建新的消息modified_content = b'\x1d\x00\x00\x00\x03\x00\x00\x00\x00x`\xfe\x8fA\x94\xce\x03\xff\xcc\x0f\xaaAttackProp\x01\x00'logger.info(f"------------------找到以指定的字节开头--------------------: {message.content}")# 替换消息内容message.content = modified_content# 打印修改后的消息logger.info(f"Modified client binary message: {message.content}")# 检查消息是否以指定的字节开头if message.content.startswith(b'\x19\x00\x00\x00\x03\x00\x00\x00\x00x`\xfe\x8fA\x94\xce\x03\xff\xcc\x0f\xa6HpProp\x01\x00'):# 构建新的消息modified_content = b'\x1d\x00\x00\x00\x03\x00\x00\x00\x00x`\xfe\x8fA\x94\xce\x03\xff\xcc\x0f\xaaAttackProp\x01\x00'modifined_str = b'\r\x00\x00\x00a\x14\x00\x00\x00x`\xfe\x8fA\x92\x01\n'logger.info(f"------------------找到以指定的字节开头--------------------: {message.content}")# 替换消息内容message.content = modifined_str# 打印修改后的消息logger.info(f"Modified client binary message: {message.content}")else:# 需要修改的原始数据logger.info("服务端发送数据--------------------------------")original_data = b'\xafnot enouth item'# 新的数据new_data = b'\x0f\x00\x00\x00\xb1\xeb\x00\x00\x00x`\xfe\x8fA\x92\x00\xa2OK'a = b'\xafitem not enough\xc4\x01\x80\xc4\x01\x80'b = b'\xa1\x00\x00\x00\x9f\xeb\x00\x00\x00x`\xfe\x8fA\x94\x00\xa2OK\xc4y\x86\x00\x83\x00\xce\x00\xa8\xea;\x01\xcb@$\x00\x00\x00\x00\x00\x00\x02\x00\x01\x83\x00\xce\x00\xa9\x15)\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x02\x83\x00\xce\x00\xa8.\xb9\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x03\x83\x00\xce\x00\xa8\x03\xbb\x01\xcb@I\x00\x00\x00\x00\x00\x00\x02\x00\x04\x83\x00\xce\x00\xa9\xe0]\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x05\x83\x00\xce\x00\xa8.\xb9\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\xc4\x15\x81\x00\x83\x00\xce\x00\xa8\x03\xba\x01\xcbQ\xb1\xa0\xaf\xf8\x86P\xc6\x02\x00'b2 = b'\x00\x01\x00\x00\x18\xfc\x00\x00\x00x`\xfe\x8fA\x91\x83\x17\x85\xce\x00\xa8.\xb9\x81\x01\xcb@\x00\x00\x00\x00\x00\x00\x00\xce\x00\xab4"\x81\x01\xcb@r \x00\x00\x00\x00\x00\xce\x00\xa8\xea;\x81\x01\xcb@\x94\xb8\x00\x00\x00\x00\x00\xce\x00\xa8\x03\xba\x81\x01\xcbQ\xd6"\x1b\x0c\xe5E\x08\xce\x00\xa8\x03\xbb\x81\x01\xcb@\xb5\x9a\x00\x00\x00\x00\x00\x1d\x8e\xce\x03\x0b\x9a\xe9\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xeb\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xec\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xed\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xee\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xef\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf0\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf1\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf2\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf3\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf4\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf5\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf6\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf7\x81\x01\xcd\x01"N\x82\x01\x81\x01\x81\x00\xcd\x02\xf9\x00\x81\xce\x00\xa9\xe0]\x81\x02\x02'b3 = b'8\x03\x00\x00\x9f\xeb\x00\x00\x00x`\xfe\x8fA\x94\x00\xa2OK\xc4\xc9\x8a\x00\x83\x00\xce\x00\xa8\xea2\x01\xcb@\x00\x00\x00\x00\x00\x00\x00\x02\x00\x01\x83\x00\xce\x00\xa8*\xc9\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x02\x83\x00\xce\x00\xa8*\xcb\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x03\x83\x00\xce\x00\xa8\xea3\x01\xcb@\x00\x00\x00\x00\x00\x00\x00\x02\x00\x04\x83\x00\xce\x00\xb7\x1bn\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x05\x83\x00\xce\x00\xa9\xe0q\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x06\x83\x00\xce\x00\xa8*\xc9\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x07\x83\x00\xce\x00\xa8\xea;\x01\xcb@$\x00\x00\x00\x00\x00\x00\x02\x00\x08\x83\x00\xce\x00\xa8\xea2\x01\xcb@\x00\x00\x00\x00\x00\x00\x00\x02\x00\t\x83\x00\xce\x00\xa9\xe4O\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\xc5\x02[\xde\x00\x1e\x00\x83\x00\xce\x00\xa8U\xca\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x01\x83\x00\xce\x00\xa8Q\xe9\x01\xcb@\x08\x00\x00\x00\x00\x00\x00\x02\x00\x02\x83\x00\xce\x00\xa8U\xcf\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x03\x83\x00\xce\x00\xa8U\xd1\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x04\x83\x00\xce\x00\xa8U\xd3\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x05\x83\x00\xce\x00\xa8Q\xe7\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x06\x83\x00\xce\x00\xa8U\xcb\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x07\x83\x00\xce\x00\xa8Q\xe0\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x08\x83\x00\xce\x00\xa8U\xd0\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\t\x83\x00\xce\x00\xa8Q\xe8\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\n\x83\x00\xce\x00\xa8Q\xea\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x0b\x83\x00\xce\x00\xa8U\xcd\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x0c\x83\x00\xce\x00\xa8Q\xec\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\r\x83\x00\xce\x00\xa8\xa0\x03\x01\xcb@\x00\x00\x00\x00\x00\x00\x00\x02\x00\x0e\x83\x00\xce\x00\xa8\xa0\x06\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x0f\x83\x00\xce\x00\xa8\xa0\x02\x01\xcb@\x00\x00\x00\x00\x00\x00\x00\x02\x00\x10\x83\x00\xce\x00\xa8\x9f\xfb\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x11\x83\x00\xce\x00\xa8\x9f\xfc\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x12\x83\x00\xce\x00\xa8\xa0\x04\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x13\x83\x00\xce\x00\xa8\xa0\x00\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x14\x83\x00\xce\x00\xa8\x9f\xfd\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x15\x83\x00\xce\x00\xa8x\xec\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x16\x83\x00\xce\x00\xa8x\xff\x01\xcb@\x00\x00\x00\x00\x00\x00\x00\x02\x00\x17\x83\x00\xce\x00\xa8x\xea\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x18\x83\x00\xce\x00\xa8x\xf5\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x19\x83\x00\xce\x00\xa8x\xfd\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x1a\x83\x00\xce\x00\xa8x\xfb\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x1b\x83\x00\xce\x00\xa8y\x00\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x1c\x83\x00\xce\x00\xa8x\xfe\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x1d\x83\x00\xce\x00\xa8x\xef\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00'# logger.info(f"####################### Original data : {message.content}")if a in message.content:logger.info(f"okkkkkkkk Data modified successfully.")# 新的多条消息new_messages = [b'\xa1\x00\x00\x00\x9f\xeb\x00\x00\x00x`\xfe\x8fA\x94\x00\xa2OK\xc4y\x86\x00\x83\x00\xce\x00\xa8\xea;\x01\xcb@$\x00\x00\x00\x00\x00\x00\x02\x00\x01\x83\x00\xce\x00\xa9\x15)\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x02\x83\x00\xce\x00\xa8.\xb9\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x03\x83\x00\xce\x00\xa8\x03\xbb\x01\xcb@I\x00\x00\x00\x00\x00\x00\x02\x00\x04\x83\x00\xce\x00\xa9\xe0]\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\x05\x83\x00\xce\x00\xa8.\xb9\x01\xcb?\xf0\x00\x00\x00\x00\x00\x00\x02\x00\xc4\x15\x81\x00\x83\x00\xce\x00\xa8\x03\xba\x01\xcbQ\xb1\xa0\xaf\xf8\x86P\xc6\x02\x00',b'\x00\x01\x00\x00\x18\xfc\x00\x00\x00x`\xfe\x8fA\x91\x83\x17\x85\xce\x00\xa8.\xb9\x81\x01\xcb@\x00\x00\x00\x00\x00\x00\x00\xce\x00\xab4"\x81\x01\xcb@r \x00\x00\x00\x00\x00\xce\x00\xa8\xea;\x81\x01\xcb@\x94\xb8\x00\x00\x00\x00\x00\xce\x00\xa8\x03\xba\x81\x01\xcbQ\xd6"\x1b\x0c\xe5E\x08\xce\x00\xa8\x03\xbb\x81\x01\xcb@\xb5\x9a\x00\x00\x00\x00\x00\x1d\x8e\xce\x03\x0b\x9a\xe9\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xeb\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xec\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xed\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xee\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xef\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf0\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf1\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf2\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf3\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf4\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf5\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf6\x81\x01\xcd\x01"\xce\x03\x0b\x9a\xf7\x81\x01\xcd\x01"N\x82\x01\x81\x01\x81\x00\xcd\x02\xf9\x00\x81\xce\x00\xa9\xe0]\x81\x02\x02',b'\n\x0eNewMessagePush\x12\xc7\x02\nu\n`\x08\x01\x12%C10050_serverId_C10050_partitionId_81\x1a"\xe6\x8d\xa2\xe5\x8d\xa1\xef\xbc\x8c\xe5\xa4\x9a\xe7\xba\xa2\xe6\xa1\x839\xef\xbc\x8c\xe7\xbc\xba\xe5\xa4\xa7\xe5\xb0\x8f\xe7\x8e\x8b \x01(\x86\xbb\xb8\xc8\x8e20\xbc\xa6\x83 @\xd4\x0cP\x00\x12\x11\x08\x93\x8d\xe7\xba\xef\xa3\x91\xb4!\x10\xcd\xbd\xb8\xc8\x8e2\x12\xcd\x01\x08\xbc\xa6\x83\x12\xc5\x01\x08\xbc\xa6\x83 \x12\x0c\xe5\xa4\xaa\xe4\xb8\x8a\xe5\x8d\x81\xe6\x88\x92\x18\xd4\x0c"\x02zh(\x01R\x06321505Z\x06\xe6\xb8\x85\xe9\x85\x92`\x01\xa2\x01\x0819010012\xa2\x06\x85\x01\x89\xa8userName\xac\xe5\xa4\xaa\xe4\xb8\x8a\xe5\x8d\x81\xe6\x88\x92\xa8playerId\xce\x04\x00\xd3<\xa7userPic\xa819010012\xa9guildName\xa6\xe6\xb8\x85\xe9\x85\x92\xaduserHeadFrame\xce\x00\xa9\xff\x88\xa5title\x00\xa6bubble\xce\x00\xaa\x07X\xa2fp\xcbG\xde:\x96\xce\xdd\xd6b\xa8serverId\xcd\x06T\xb2\x06\x00\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01']# 删除原始消息flow.messages.pop()# 发送多条新消息for new_message in new_messages:# 创建新消息并设置内容new_msg = websocket.WebSocketMessage(type=2, # 二进制消息类型from_client=False,content=new_message,)# 发送消息flow.messages.append(new_msg)logger.info("Data modified and split into multiple messages successfully.")if original_data in message.content:logger.info("Original data found, modifying...")modified_message = new_datamessage.content = modified_messagelogger.info(f"Data modified successfully.: {message.content}")except AttributeError as e:ctx.log.error(f"AttributeError: {e}")except Exception as e:ctx.log.error(f"Unexpected error: {e}")def websocket_error(self, flow: websocket.WebSocketFlow):# 处理 WebSocket 错误ctx.log.error(f"WebSocket error: {flow}")ctx.log.error(f"Messages: {flow.messages}")addons = [WebSocketModifier()
]
3、安装证书
浏览器访问http://mitm.it/
4、修改计算机代理
5、启动
在目录的命令行中 执行
mitmdump -s mx5.py
完成后可在命令行看数据过程
相关文章:

pc端小程序抓包修改数据相关记录
看了很多关于小程序抓包的 废话不多说直接演示 一、小程序抓包 1.所需要的工具 官网下载即可: https://www.charlesproxy.com/latest-release/download.do 我这里用的 Charles-proxy-4.6.6-win64 需要中文破解参考 https://www.jianshu.com/p/4d67dbbf2f6a 2、破…...

用Python打造精彩动画与视频.2.1 Python基础语法概述
2.1 Python基础语法概述 Python作为一门功能强大且易于学习的编程语言,其基础语法简单直观,非常适合初学者入门。这一节将带你了解Python的基本语法规则,为后续制作动画和视频打下坚实的基础。 1. 变量与数据类型 Python的变量不需要提前声…...

Golang高效合并(拼接)多个gzip压缩文件
有时我们可能会遇到需要把多个 gzip 文件合并成单个 gzip 文件的场景,最简单最容易的方式是把每个gzip文件都先解压,然后合并成一个文件后再次进行压缩,最终得到我们想要的结果,但这种先解压后压缩的方式显然效率不高,…...

MySQL数据库-基本概念
数据 描述事物的符号记录包括属组、文字、图形、图像、声音、档案记录等以“记录”形式按统一的格式进行存储 表 将不同的记录组织在一起用来存储具体数据 数据库 表的集合,是以一定的组织方式存储的相互有关的数据集合 数据库管理系统(DBMS&#…...

【无标题】web+http协议+nginx搭建+nginx反向代理(环境准备)
一.Web 为用户提供互联网上浏览信息的服务,web服务是动态的,可交互的。 1.安装httpd yum -y install httpd 2.启动 systemctl start httpd 3.关闭防火墙 systemctl stop firewalld [rootrs html]# echo "我手机号是" > …...

c-periphery RS485串口库文档serial.md(serial.h)(非阻塞读)(VMIN、VTIME)
c-peripheryhttps://github.com/vsergeev/c-periphery 文章目录 NAMESYNOPSISENUMERATIONS关于奇偶校验枚举类型 DESCRIPTIONserial_new()serial_open()关于流控制软件流控制(XON/XOFF)硬件流控制(RTS/CTS)选择流控制方法 serial_…...

Matlab arrayfun 与 bsxfun——提高编程效率的利器!
许多人知道 MATLAB 向量化编程,少用 for 循环 可以提高代码运行效率,但关于代码紧凑化编程, arrayfun 与 bsxfun 两个重要函数却鲜有人能够用好,今天针对这两个函数举例说明其威力。 Matlab arrayfun 概述 arrayfun 是 Matlab …...

【Unity编辑器拓展】GraphView自定义可视化节点
1、创建节点区域脚本 其中的new class UxmlFactory,可以让该元素显示在UI Builder中,我们就可以在Library-Project中看到我们新建的这两个UI元素,就可以拖入我们的UI窗口编辑了 public class NodeTreeViewer : GraphView {public new class…...

教程系列4 | 趋动云『社区项目』极速体验 LivePortrait 人脸表情“移花接木”大法
LivePortrait LivePortrait 由快手可灵大模型团队开源,只需 1 张原图就能生成动态视频。 LivePortrait 的核心优势在于其卓越的表情"迁移"技术,能够令静态图像中的人物瞬间焕发活力,无论是眨眼、微笑还是转头,皆栩栩如…...

WGS84、GCJ-02、BD09三大坐标系详解
文章目录 前言WGS84坐标系定义应用WGS84 Web 墨卡托投影 GCJ-02坐标系(火星坐标系)定义应用GCJ-02经纬度投影与Web墨卡托投影 BD09坐标系(百度坐标系)定义应用BD09经纬度投影与Web墨卡托投影 坐标系之间的区别与注意事项总结 前言…...

css上下动画 和淡化
.popup_hidden_bg { transition: opacity .5s ease-out; opacity: 0; pointer-events: none; /* 防止在隐藏时仍然能点击 */ } keyframes popupShop { from { transform: translateY(100%); opacity: 0; } to {transform: translateY(0);opacity: 1; }} keyframes popupHidd…...

深入解析C#中的URI和URL编码:理解EscapeDataString、EscapeUriString和UrlEncode的区别及字符编码错误处理
在C#中,处理URI(统一资源标识符)和URL(统一资源定位符)时,可以使用Uri.EscapeDataString、Uri.EscapeUriString和HttpUtility.UrlEncode(或WebUtility.UrlEncode)方法来编码字符串。…...

【CSS】给图片设置 max-width
.logo img{width:100%; /* 缩成父盒子的100% */max-width:100%; /* (谁小用谁的百分之百) *//* max-width:100%;【1】图片比盒子大,缩成父盒子的100%【2】图片比盒子小,图片自身的100%*/ }示例 设置样式 .el-image {width: 100%;max-width: 100%;max-…...

区块链——代码格式检查(prettier、solhint)
一、引入依赖 // 导入prettier prettier-plugin-solidity yarn add --dev prettier prettier-plugin-solidity yarn add --dev solhint二、创建.prettierrc文件 {"tabWidth": 2,"semi": false,"useTabs": false,"singleQuote": fals…...

搭建自动化 Web 页面性能检测系统 —— 部署篇
作为一个前端想去做全栈的项目时,可能第一个思路是 node vue/react。一开始可能会新建多个工程目录去实现,假设分别为 web 和 server,也许还有管理后台的代码 admin,那么就有了三个工程的代码。此时为了方便管理就需要在远程仓库…...

知识图谱增强的RAG(KG-RAG)详细解析
转自:知识图谱科技 这是一个与任务无关的框架,它将知识图谱(KG)的显性知识与大型语言模型(LLM)的隐含知识结合起来。这是该工作的arXiv预印本 https://arxiv.org/abs/2311.17330 。 我们在这里利用一个名为…...

python中list的深拷贝和浅拷贝
其实这还是涉及到python中的可变对象和不可变对象的概念。 https://www.cnblogs.com/poloyy/p/15073168.html # -*- coding: utf-8 -*-person [name, [savings, 100.00]] hubby person[:] # slice copy wifey list(person) # fac func copy a [id(x) for x in person] b …...

【LeetCode】字母异位词分组
题目描述: 给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”…...

Golang | Leetcode Golang题解之第295题数据流的中位数
题目: 题解: type MedianFinder struct {nums *redblacktree.Treetotal intleft, right iterator }func Constructor() MedianFinder {return MedianFinder{nums: redblacktree.NewWithIntComparator()} }func (mf *MedianFinder) AddNum(…...

【C语言】C语言期末突击/考研--数据的输入输出
目录 一、printf()输出函数介绍 二、scanf读取标准输入 (一)scanf函数的原理 (二)多种数据类型混合输入 三、练习题 今天我们学习printf和scanf读取标准输入。下面我们开始正式的学习吧。 C语言中有很多内置函数,今…...

How can I fix my Flask server‘s 405 error that includes OpenAi api?
题意:解决包含OpenAI API的Flask服务器中出现的405错误(Method Not Allowed,即方法不允许) 问题背景: Im trying to add an API to my webpage and have never used any Flask server before, I have never used Java…...

LeetCode Hot100 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确…...

【Linux】线程的控制
目录 线程等待 线程退出 线程的优缺点 线程独占和共享的数据 我们说Linux是用进程模拟的线程,所以Linux中只有轻量级进程的概念,但是,用户是只认线程的,所以我们有一个叫原生线程库的东西,它就负责把轻量级进程的系…...

Vue3自研开源Tree组件:人性化的拖拽API设计
针对Element Plus Tree组件拖拽功能API用的麻烦,小卷开发了一个API使用简单的JuanTree组件。拖拽功能用起来非常简单! 文章目录 使用示例allowDragallowDrop支持节点勾选支持dirty检测后台API交互 源码实现 使用示例 组件的使用很简单: 通过…...

MYSQL--触发器详解
触发器 1.触发器简介 触发器(trigger)是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update…...

C++实用指南:Lambda 表达式的妙用
Lambda 表达式的灵活性和强大功能确实为编程提供了许多便利。但是我们发现许多开发者仍然无法灵活运用其便利,于是写了这篇文章。 Lambda 允许我们编写更简洁和灵活的代码。例如在处理网络请求时,我们经常需要确保响应与当前的状态或需求仍然相关。通过…...

FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论
源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 梳理下思路 1.判断是否登录 2.课程是否存在 3.如果是回复,查看回复是否存在 4.是否有权限 5.发起评论 首先新增pydantic模型 class Cour…...

基于springboot+vue+uniapp的居民健康监测小程序
开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...

TypeScript基础【学习笔记】
一、TypeScript 开发环境搭建 下载并安装 Node.js使用 npm 全局安装 typescript 进入命令行输入:npm i -g typescript 创建一个 ts 文件使用 tsc 对 ts 文件进行编译 进入命令行进入 ts 文件所在目录执行命令:tsc xxx.ts 二、基本类型 类型声明 通过类型…...

树莓派物联网服务器搭建流程:集成 Node.js、InfluxDB、Grafana 和 MQTT 协议
目录 一、搭建准备 1. 硬件要求 2. 软件要求 二、技术栈概述 三、搭建步骤 1. 安装操作系统 2. 启动树莓派 3. 更新系统 4. 安装必要的软件 4.1 安装 Python 和 Flask 4.2 安装 Node.js 4.3 安装 Mosquitto(MQTT Broker) 4.4 安装 InfluxDB…...