IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Aardio - 【库】sunny网络中间件 -> 正文阅读

[网络协议]Aardio - 【库】sunny网络中间件

本库封装心得:

1、aardio回调函数是被dll用线程启动的,所以在声明回调函数时,不能用 ..raw.tostdcall() ,而是要用 ..thread.tostdcall()。

2、因为线程安全的原因,回调函数不能访问主线程的成员,比如窗口组件。所以在定义回调函数时,给他指定一个owner(比如 winform 或 {form=winform} ),在回调函数中,就可以用 owner 或 owner.form 来访问主窗口对象 winform 了。

3、本库所用sunny.dll不支持内存加载。

4、进行函数功能分类(模块化),以方便调用。

一、SUNNY网络中间件是什么:

Sunny网络中间件 和 Fiddler 模块类似。是可跨平台的网络分析组件。可用于 HTTP / HTTPS / WS / WSS / TCP 网络分析,无内存泄漏,为二次开发量身制作。

Sunny项目主要用于易语言?(其他语言也可使用)目前免费且开源。应dio友需求,我将他封装为aardio库,供有此功能需求的dio友们下载使用。

SDK功能:

1.支持 获取/修改 HTTP/HTTPS/WS/WSS/TCP 发送及返回数据

2.支持 HTTP/HTTPS/WS/WSS 设置全局代理(上游代理)

3.支持 对 HTTP/HTTPS/WS/WSS 指定连接使用指定代理

4.支持 对 HTTP/HTTPS/WS/WSS 链接重定向

5.支持 对 TCP链接进行IP重定向

6.支持 gzip, deflate, br 解码

7.支持 WS/WSS 主动发送数据

8.支持 TCP 主动发送数据

二、运行效果截图:

三、库文件下载:

解压后放到 /lib/godking/ 目录。

chengxu.online??→ aardio资源下载 → sunny.rar

四、库结构:

?五:调用示例:

import win.ui;
import win.ui.ctrl.vlistEx
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469;topmost=1)
winform.add(
button={cls="button";text="开始HTTP拦截";left=397;top=394;right=554;bottom=447;db=1;dr=1;z=1};
button2={cls="button";text="停止";left=578;top=394;right=735;bottom=447;db=1;dr=1;z=2};
button3={cls="button";text="打开ws测试网站";left=216;top=394;right=373;bottom=447;db=1;dl=1;z=4};
button4={cls="button";text="打开wss测试网站";left=35;top=394;right=192;bottom=447;db=1;dl=1;z=8};
rb1={cls="radiobutton";text="替换图片";left=105;top=356;right=258;bottom=384;checked=1;db=1;dl=1;font=LOGFONT(h=-16);z=5};
rb2={cls="radiobutton";text="阻止图片";left=281;top=356;right=434;bottom=384;db=1;dl=1;dr=1;font=LOGFONT(h=-16);z=6};
rb3={cls="radiobutton";text="图片放行";left=451;top=356;right=604;bottom=384;db=1;dr=1;font=LOGFONT(h=-16);z=7};
vlist={cls="win.ui.ctrl.vlistEx";text="自定义控件";left=10;top=8;right=752;bottom=350;db=1;dl=1;dr=1;dt=1;z=3}
)
/*}}*/

winform.vlist.setColumns({"序号","协议类型","消息类型","传输模式","url"},{40,70,120,70,-1});

import godking.sunny
var sunny=godking.sunny()
sunny.callback_http = function(winform,id,msgid,msgtype,mod,url,pid,notice,err){
	// 注意:1、回调函数为线程函数;2、要重新引用godking.sunny
	import godking.sunny
	// 将部分内容写入窗口虚表中
	winform.vlist.addRow("[@rowindex]","http/s",godking.sunny.msgType.getName(msgtype),mod,url)
	winform.vlist.ensureVisible(winform.vlist.count)
	// 将图片请求进行替换
	if msgtype==godking.sunny.msgType.http_request and !winform.rb3.checked {
		var request = godking.sunny.httpRequest(msgid);
		var t = request.getHeader("Content-Type")
		import string
        if ..string.find(url,"@@.jpg") or ..string.find(url,"@@.jpeg") or ..string.find(url,"@@.png"){
            if winform.rb1.checked request.setUrl("http://chengxu.online/images/banner.gif");
            if winform.rb2.checked request.setUrl("");
        }
	}
	// 过滤掉图片的正文消息
	if msgtype==godking.sunny.msgType.http_response and notice {
		var request = godking.sunny.httpResponse(msgid);
		var t = request.getHeader("Content-Type")
		import string
        if ..string.find(t,"@image/",1){
			return true; 
        }
	}
}

sunny.callback_websocket = function(winform,id,msgid,msgtype,mod,url,pid){
	// 注意:1、回调函数为线程函数;2、要重新引用godking.sunny
	import godking.sunny
	// 将部分内容写入窗口虚表中
	winform.vlist.addRow("[@rowindex]","websocket",godking.sunny.msgType.getName(msgtype),mod,url)
	winform.vlist.ensureVisible(winform.vlist.count)
	// 拦截发送数据
	if msgtype==godking.sunny.msgType.ws_send or msgtype==godking.sunny.msgType.wss_send {
		var ws = godking.sunny.webSocket(msgid);
		var t = ws.getBodyText();
		winform.vlist.addRow("[@rowindex]","websocket","发送数据",mod,t)
		winform.vlist.ensureVisible(winform.vlist.count)
		t = t++"(已修改)"
		ws.setBody(t)
   	}
   	// 拦截接收数据
	if msgtype==godking.sunny.msgType.ws_received or msgtype==godking.sunny.msgType.wss_received {
 		var ws = godking.sunny.webSocket(msgid);
		var t = ws.getBodyText();
		winform.vlist.addRow("[@rowindex]","websocket","接收数据",mod,t)
		winform.vlist.ensureVisible(winform.vlist.count)
  	}
}	

winform.button.oncommand = function(id,event){
	if sunny.start(2021/*代理端口*/,true/*过滤正文*/,true/*全局代理*/,true/*禁止压缩*/,winform/*传递窗口*/) {
		..win.msgbox("已开启!",,,winform.hwnd);
	} else {
		..win.msgbox("开启失败!",,,winform.hwnd);
	}
}

winform.button2.oncommand = function(id,event){
	sunny.stop();
	..win.msgbox("已停止!",,,winform.hwnd);
}

winform.button3.oncommand = function(id,event){
	import process
	process.execute("http://coolaf.com/tool/chattest")
}

winform.button4.oncommand = function(id,event){
	import process
	process.execute("https://www.idcd.com/tool/socket")	
}

winform.show();
win.loopMessage();

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:59:55  更:2022-02-28 16:01:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:30:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码