| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛 | 
共有 1776 人关注过本帖
标题:分享:让VFP9拥有现代网络能力的两个类,支持 HTTP/2、TLS 1.2、TLS 1.3、W ...
只看楼主 加入收藏
bobwu
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2009-7-25
收藏
 问题点数:0 回复次数:7 
分享:让VFP9拥有现代网络能力的两个类,支持 HTTP/2、TLS 1.2、TLS 1.3、WebSocket,附示例
前言:

笔者接到一个单位用户需求,单位电脑不能升级,操作系统是windows 7 sp1,也不能升级操作系统,运行的的管理软件是VFP9开发的,有源码。
协作单位的系统升级后,数据推送,使用websocket方式,同时,要求数据提交支持TLS 1.3。
离职的原程序员,不接招,这家单位联系到我本人,我硬着头皮接了活。
怎么办呢?上RUST大法,利用RUST方便的生态,于是有了这个rustnet.dll,让VFP又行了,解决了用户的问题,也收到了大红包。
图片附件: 游客没有浏览图片的权限,请 登录 或 注册


一、用途

这是给 Visual FoxPro 9 使用的 32 位网络 DLL,让vfp摆脱对windows WinHttp.WinHttpRequest.5.1 的依赖。

提供 HTTP 和 WebSocket客户端功能。
支持 HTTP/1.1、HTTP/2、TLS 1.2、TLS 1.3、WebSocket 和 WSS。
HTTP 响应可以解压 gzip、deflate、Brotli 和 Zstandard。

兼容ndows 7 SP1

TLS 由 rustls 实现,不使用 Windows 的 SChannel,所以 Windows 7 SP1上也能
连接 TLS 1.3 服务器。系统 Internet 选项里的 TLS 开关不会影响这个 DLL。

DLL 是 32 位文件,只依赖系统 DLL ,所以可(绿色运行):

    advapi32.dll
    bcrypt.dll
    kernel32.dll
    msvcrt.dll
    ntdll.dll
    user32.dll
    ws2_32.dll

默认直接连接目标服务器。也可以指定已有的 HTTP 或 SOCKS5 代理,
可以通过 SetProxy() 使用 HTTP、HTTPS、SOCKS5 和 SOCKS5H 代理。

二、vfpnet.prg 面向 VFP9 的对象封装:

1、封装了VfpWinHttpRequest类,兼容 WinHttp.WinHttpRequest.5.1 的核心编程习惯,提供
Open、Send、SetRequestHeader、SetProxy、SetTimeouts、GetResponseHeader 和
 GetAllResponseHeaders 等常用方法,以及 Status、ResponseBody、ResponseText 等常用属性。
已有的 WinHTTP 风格代码通常只需少量修改即可迁移。

在这种调用方式之上,VfpWinHttpRequest类还增加了 HTTP/2 状态、gzip、deflate、
Brotli、Zstandard 自动解压、SOCKS5/SOCKS5H 代理、最终 URL、详细诊断和
响应状态标志,并自动完成 ABI 校验。

2、提供独立的 VfpWebSocket 类,用于 WebSocket/WSS 连接、收发、事
件轮询和窗口通知。


三、示例

1、vfpnet.prg中的VFPHTTP() 是笔者使用最多的一个函数,演示了如何使用常规的HTTP能力。

代理支持:

使用 HTTP 代理:

    loHttp = CREATEOBJECT("VfpWinHttpRequest")
    =loHttp.SetProxy(2, "http://127.0.0.1:8080", "")

使用 SOCKS5 代理:
    loHttp = CREATEOBJECT("VfpWinHttpRequest")
    =loHttp.SetProxy(2, "socks5://127.0.0.1:1080", "")
使用 socks5:// 时,目标域名由本机解析。使用 socks5h:// 时,目标域名交给代理服务器解析。

代理地址可以带用户名和密码:
    http://user:password@127.0.0.1:8080
    socks5://user:password@127.0.0.1:1080

SetProxy() 的第三个参数是绕过列表。命中绕过列表的地址会直接连接,不经过
代理。设置为直接连接:

    =loHttp.SetProxy(1, "", "")

2、使用 WebSocket示例

使用 PostMessage + BINDEVENT + Poll(0) 接收消息。Rust 后台线程只把
事件放进队列并向指定窗口投递通知,不会直接进入 VFP。窗口消息只携带连接
句柄和调用方 cookie,正文仍由 VFP 主线程通过 Poll(0) 读取。

Wolfx SeisJS Websocket实时测站示例

seisjs_live_stations.prg 连接公开的 SeisJS 测站数据流,不需要
Token,也不需要发送订阅报文:

    DO seisjs_live_stations.prg

连接地址:

    wss://seisjs.wolfx.jp/all_seis

示例使用 PostMessage + BINDEVENT + Poll(0) 接收高频数据,并将每次消息处理
限制为最多 200 个事件;队列仍有数据时,再投递一条 VFP 窗口消息继续处理,
避免单次回调长时间占用界面线程。

窗口按测站 UUID 汇总并显示地区、经纬度、PGA、PGV、PGD、JMA 震度、CSIS
烈度和更新时间,同时保留最近一条原始 JSON。服务端在连接时和每分钟发送
heartbeat JSON,示例收到后会回复官方建议的纯文本 ping。

官方字段中,type 是测站 UUID,时间字段主要是 update_at 和 create_at;
不能把文档外的示意字段当作固定协议。该公共数据只适合合法研究和开发,不能
替代官方地震预警、灾害信息或疏散指令。

官方文档:
    https://wolfx.jp/zh/docs/seisjs-api/

vfpnet3.zip (1.84 MB)
收到的鲜花
  • trial03 于 2026-09-24 14:31 送鲜花  1朵  
  • kangss 于 2026-09-25 11:39 送鲜花  1朵  
  • sych 于 2026-09-25 15:18 送鲜花  1朵  
  • schtg 于 2026-09-25 20:22 送鲜花  1朵  
  • zwk34 于 2026-09-29 12:07 送鲜花  1朵  
  • dglhz 于 3 天前 03:35 送鲜花  10朵   附言:解决方案,及时雨。
搜索更多相关主题的帖子: 代理 DLL HTTP TLS 连接 
2026-09-24 09:03
nbwww
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:11
帖 子:406
专家分:1066
注 册:2021-1-9
收藏
 得分:0 
2026-09-24 10:06
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:445
专家分:962
注 册:2014-6-12
收藏
 得分:0 
2026-09-25 12:04
seasoners
Rank: 2
等 级:论坛游民
帖 子:127
专家分:22
注 册:2013-12-15
收藏
 得分:0 
真棒
2026-09-25 19:02
schtg
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:USA
等 级:贵宾
威 望:67
帖 子:2792
专家分:4967
注 册:2012-2-29
收藏
 得分:0 
回复 楼主 bobwu
2026-09-25 20:18
星光闪闪513
Rank: 2
等 级:论坛游民
威 望:1
帖 子:36
专家分:34
注 册:2015-10-27
收藏
 得分:0 
2026-09-25 20:50
easyppt
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:556
专家分:1076
注 册:2021-11-24
收藏
 得分:0 
NB,必须点赞,这是哪位神秘大佬!


现代web开发全家桶:http/s+socket+json读写+gzip+内存解压zip+各种接口所需加解密函数

大佬如果都能封装到一起,那就无敌了,VFP也可以威风起来了

[此贴子已经被作者于2026-9-25 22:28编辑过]

2026-09-25 22:10
easyppt
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:556
专家分:1076
注 册:2021-11-24
收藏
 得分:0 
能否讲一下 异步怎么请求的。
比如:
1、异步请求URL,获取json
2、异步下载,实时获取进度

还有异步中的错误控制

2026-09-26 07:32
快速回复:分享:让VFP9拥有现代网络能力的两个类,支持 HTTP/2、TLS 1.2、TLS 1 ...
数据加载中...
 
   
关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021587 second(s), 11 queries.
Copyright©2004-2026, BCCN.NET, All Rights Reserved