pc端小程序抓包修改数据相关记录
看了很多关于小程序抓包的 废话不多说直接演示
一、小程序抓包
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语言中有很多内置函数,今…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
