首页
友人帐
留言板
关于
Search
1
IDE Eval Resetter:JetBrains 全家桶无限试用插件
378 阅读
2
影视资源采集站收录大全
302 阅读
3
linux安装或升级protoc
223 阅读
4
VFM 3.7.5 源码 - 一个极简的 PHP 私人云盘!
161 阅读
5
批量采集美女写真等图片做图片站
149 阅读
谈天说地
程序源码
技术教程
成品源码
登录
Search
标签搜索
PHP
linux
源码
go
windows
centos
原创
mysql
微信
激活
采集
宝塔
绿色版
API
解析
SDK
图片
破解
域名
html
云青
累计撰写
150
篇文章
累计收到
78
条评论
首页
栏目
谈天说地
程序源码
技术教程
成品源码
页面
友人帐
留言板
关于
搜索到
150
篇与
的结果
2023-05-30
go-swagger 快速入门教程
生成描述文件命令用法: swagger [选项] generate spec [命令]应用选项: -q, --quiet 不显示log --log-output=LOG-FILE 输出Log到文件帮助选项: -h, --help 显示帮助信息[描述文件命令] -w, --work-dir= 基本工作路径 (默认: .) -t, --tags= 构建的标签 -m, --scan-models 引入模型 'swagger:model' --compact 不格式化json -o, --output= 输出文件路径 -i, --input= 添加需要合并的描述文件路径 -c, --include= 添加外部包路径 -x, --exclude= 不要引入的包路径 --include-tag= 引入带有特定tag的路径文件 (可声明多个) --exclude-tag= 不要引入带有特定tag的路径文件 (可声明多个) --exclude-deps 不引人项目所有依赖生成swagger 文件 在项目根目录执行swagger generate spec --output=./XXX.yml XXX是文件名,即可生成运行server swagger serve --no-open -F=swagger --port 36666 XXX.yml 36666是端口号,xxx是文件名其他命令合并文件swagger mixin {spec1} {spec2}扩充$refswagger expand {spec}扁平化: 所有外部 $ref 都被导入到主文档中,并且内联模式被重新组织为定义。swagger flatten {spec}生成markdownswagger generate markdown -f {spec} --output swagger.mode
2023年05月30日
56 阅读
0 评论
0 点赞
2023-05-19
linux安装或升级protoc
由于协作管理protoc版本不一致导致每次生成的文件都会冲突,直接用同一版本获取源码包Git地址:https://github.com/protocolbuffers/protobuf/releases指定版本:https://github.com/protocolbuffers/protobuf/releases/tag/v3.21.12此处以3.21.12版本为例。安装或升级protoc可以先阅读,各模块目录下的README.txt文件,了解安装和使用方法。我们必须先安装或升级ptotoc编译器,才能进一步编译获得,完整的python或java模块。unzip protobuf-3.21.12.zip cd protobuf-3.21.12 ./autogen.sh ./configure make make check make install protoc --version
2023年05月19日
223 阅读
7 评论
0 点赞
2023-03-18
golang实现百度智能小程序用户数据的解密
golang实现百度智能小程序用户数据的解密百度智能小程序官方文档博主在网上gitee github找了很多 几乎没有看到适配golang的方法,以下方法可行类库/* * @author anderyly * @email admin@aaayun.cc * @link http://blog.aaayun.cc * @copyright Copyright (c) 2023 * */ package baidu import ( "crypto/aes" "crypto/cipher" "encoding/base64" "encoding/json" "errors" "fmt" "regexp" ) var _ AppletDataCrypt = (*appletDataCrypt)(nil) type AppletDataCrypt interface { Decrypt(data string, iv string, isJSON bool) (interface{}, error) // 解密 } type appletDataCrypt struct { AppID string SessionKey string } var errorCode = map[string]int{ "IllegalAppID": -41000, "IllegalAesKey": -41001, "IllegalIV": -41002, "IllegalBuffer": -41003, "DecodeBase64Error": -41004, "DecodeJsonError": -41005, } type showError struct { errorCode int errorMsg error } func NewAppletDataCrypt(appid, sessionKey string) AppletDataCrypt { return &appletDataCrypt{ AppID: appid, SessionKey: sessionKey, } } func (e showError) Error() string { return fmt.Sprintf("{code: %v, error: \"%v\"}", e.errorCode, e.errorMsg) } func (con *appletDataCrypt) Decrypt(data string, iv string, isJSON bool) (interface{}, error) { aesKey, err := base64.StdEncoding.DecodeString(con.SessionKey) if err != nil { return nil, showError{errorCode["DecodeBase64Error"], err} } if len(iv) != 24 { return nil, showError{errorCode["IllegalIV"], errors.New("iv length is error")} } aesIV, err := base64.StdEncoding.DecodeString(iv) if err != nil { return nil, showError{errorCode["DecodeBase64Error"], err} } aesCipherText, err := base64.StdEncoding.DecodeString(data) if err != nil { return nil, showError{errorCode["DecodeBase64Error"], err} } aesPlantText := make([]byte, len(aesCipherText)) aesBlock, err := aes.NewCipher(aesKey) if err != nil { return nil, showError{errorCode["IllegalBuffer"], err} } mode := cipher.NewCBCDecrypter(aesBlock, aesIV) mode.CryptBlocks(aesPlantText, aesCipherText) aesPlantText = con.PKCS7UnPadding(aesPlantText) var decrypted map[string]interface{} re := regexp.MustCompile(`[^\{]*(\{.*\})[^\}]*`) aesPlantText = []byte(re.ReplaceAllString(string(aesPlantText), "$1")) err = json.Unmarshal(aesPlantText, &decrypted) if err != nil { return nil, showError{errorCode["DecodeJsonError"], err} } if isJSON == true { return string(aesPlantText), nil } return decrypted, nil } func (con *appletDataCrypt) PKCS7UnPadding(plantText []byte) []byte { length := len(plantText) if length > 0 { unPadding := int(plantText[length-1]) return plantText[:(length - unPadding)] } return plantText } 调用方法// res为json需要自行json.Unmarshal这里不做演示 res, err := baidu.NewAppletDataCryp("appid", "sessionKey").Decrypt("加密的数据", "偏移量", true)
2023年03月18日
34 阅读
0 评论
0 点赞
2022-12-05
TP5使用workerman开启websocket服务
前言之前代码使用websocket方式是直接下载workman文件放入vendor中进行使用,这种方式处理及其容易出现问题,比如linux运行正常而windows无法使用,每次部署代码拉取依赖包都会覆盖等奇奇怪怪的问题安装依赖 通过Composer.exe安装相关依赖:composer require topthink/think-worker 如果报错,如下:composer require topthink/think-worker Using version ^2.0 for topthink/think-worker ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 topthink/think-worker v2.0.5 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.4 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.3 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.2 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.1 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.0 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - Installation requestfortopthink/think-worker ^2.0 -> satisfiable by topthink/think-worker[v2.0.0, v2.0.1, v2.0.2, v2.0.3, v2.0.4, v2.0.5].Installation failed, reverting ./composer.json to its original content. Installation failed, reverting ./composer.json to its original content. 则是版本不匹配,用低版本的workerman,更改如下:composer require topthink/think-worker=1.0.* 如果是windows系统,还需安装依赖:composer require workerman/workerman-for-win 启动服务文件在项目根目录里面新增server.php文件<?php define('APP_PATH', __DIR__ . '/../application/'); define("BIND_MODULE", "server/Screen"); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php';增加控制器<?php namespace app\server\controller; use think\worker\Server; class Screen extends Server { protected $socket = 'websocket://127.0.0.1:2346'; private $all = []; /** * 收到信息 * @param $connection * @param $data */ public function onMessage($connection, $data) { // 广播 foreach ($this->all as $v) { $v->send(json_encode("广播")); } // $connection->send("收到消息啦,您的id:" . $connection->id); } /** * 当连接建立时触发的回调函数 * @param $connection */ public function onConnect($connection) { // 保存所有已连接的客户端id $this->all[$connection->id] = $connection; } /** * 当连接断开时触发的回调函数 * @param $connection */ public function onClose($connection) { // 去除断开连接的客户端 unset($this->all[$connection->id]); } /** * 当客户端的连接上发生错误时触发 * @param $connection * @param $code * @param $msg */ public function onError($connection, $code, $msg) { echo "error $code $msg"; } /** * 每个进程启动 * @param $worker */ public function onWorkerStart($worker) { } }启动监听服务打开cmd或bash执行以下代码php server.php测试打开chrome浏览器, 先打开127.0.0.1域名下的网页( js跨域不能通讯),按F12打开调试控制台, 在console一栏输入(或者把下面代码放入到html页面用js运行)ws = new WebSocket("ws://127.0.0.1:2346"); ws.onopen = function() { alert("连接成功"); ws.send('tom'); alert("给服务端发送一个字符串: tom"); }; ws.onmessage = function(e) { alert("收到服务端的消息: " + e.data); }; ws.send('保持连接, 发第二次信息, 查看服务器回应');
2022年12月05日
27 阅读
0 评论
0 点赞
2022-12-02
最好用的完全开源的内网穿透工具frps
前期准备:首先你要有一台云服务器或者VPS,有公网ip或域名都可以,内网主机(自己的电脑)一台。本文所用的服务端是我用阿里云的Linux系统,客户端是windows11系统。服务端(Linux)搭建步骤 下载服务端的frp 使用tar命令解压下载成功的压缩包文件:tar -zxvf frp_0.45.0_linux_arm64.tar.gz 使用cd命令进入解压出来的文件夹:mv frp_0.45.0_linux_arm64 frp && cd frp 修改服务器配置文件(frps.ini):vim fros.ini # 编辑 [common] bind_port = 7000 vhost_http_port = 88 vhost_https_port = 89 #与客户端通信的令牌 token = 57854 dashboard_user = admin #dashboard 密码 dashboard_pwd = admin #dashboard 端口,启动成功后可通过浏览器访问如http://ip:7500 dashboard_port = 7500 启动frp服务端,让frp在后台运行:nohup ./frps -c frps.ini & > frp.log 这样即使关掉了SSH,frp依然在后台运行中。到此,服务端的搭建已经完成。 客户端搭建步骤 下载客户端的frp,在上文地址下载最新windows压缩包 解压下载成功的压缩包 编辑frpc.ini文件,内容如下:[common] server_addr = x.x.x.x #公网ip server_port = 7000 #与服务端通信的令牌 token = 57854 [mysql] type = tcp #local_ip = 127.0.0.1 local_port = 3306 #本地mysql端口 remote_port = 3366 #印射公网端口 #连接Windows远程桌面的 [rdp] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 3389 custom_domains = x.x.x.x #公网ip或域名 [web01] type = http local_ip = 127.0.0.1 local_port = 80 locations = / custom_domains = x.x.x.x #公网ip或域名 [web02] type = http local_ip = 127.0.0.1 local_port = 8090 locations = /cardmanager custom_domains = x.x.x.x #公网ip或域名 #通过tcp来连接svn [svn] type = tcp local_ip =127.0.0.1 local_port = 81 remote_port = 9000 启动frp客户端: 在目录下打开cmd命令窗口,执行如下命令:frpc.exe -c frpc.ini 到此,客户端的搭建已经完成。
2022年12月02日
26 阅读
0 评论
0 点赞
1
2
...
30