Xelloss0618 发表于 2022-7-5 14:37:55

【模块】WinHTTP API 网页访问模块

Curl 是火山目前最好的网络访问库,不过稍微有点重,因此封装系统自带的网络库还是非常有必要的。
Windows 提供了两套网络访问接口:WinHTTP 和 WinINet,还有基于这两个接口封装的 COM 对象:WinHTTP.WinHttpRequest、XMLHTTPRequest。
其中 COM 对象会简单易用一些,但相比 API 缺了很多功能。而 WinHTTP API 是最底层的,WinINet API 的封装层次比较高,但不能进行底层控制,但相对也有 WinHTTP 不支持的 FTP 连接。
目前这几个在火山里都有第三方的封装,但都不太完整,所以我选择了 WinHTTP C/C++ API 做了完整封装。

本类库主要有以下几个对象:

一、WinHTTP网络类
本对象完整封装了WinHTTP C/C++ API,而且将 WinHttpSetOption 和 WinHttpQueryOption 里面的绝大部分选项都单独封装成方法,所以总共有 160 多个方法,还有 40 多个配套的常量类和辅Zhu类。
本类的方法、参数和常量都有较为完整的备注,但还是适合精通 HTTP 协议的开发者使用。

需要特别注意,WinHTTP 的很多功能只能在较新版的 Windows 上使用,部分甚至还需要 Windows 11 的 SDK。
这也是 WinHTTP 的最大缺点,很多功能受系统版本限制的,不能想用就用,否则你的软件在老系统中运行会报错或崩溃。
除非你的程序不考虑兼容老系统,一般不建议使用 Windows 8 及更高版本才能使用的 API 和选项。

二、网络同步访问类
为“WinHTTP网络类”的二次封装,提供同步的网页访问支持,对系统版本无特别要求,用法跟 Curl 的网络访问类一样。
你可以通过这个类库学习 WinHTTP 是怎样运作的。

EX版增加了自写的Cookie持久存储管理,需要多依赖一个 JSON 库。

三、网络异步访问类
为“WinHTTP网络类”的二次封装,提供异步的网页访问支持,对系统版本无特别要求。


这个类库集成在我的“PIV模块”里,地址:https://www.lkuaiy.com/rsdetails?id=16538767266683541
想要单独文件的,把里面的 p_WinHTTP.v 和 p_Json.v 复制出来即可,后者的 JSON 库是“Cookie自动管理类”的依赖项,如果把这个类和 EX 后缀的访问类删除了,就不需要带这个 JSON 库。

我还没有做充分的测试,如果有问题欢迎向我反馈,二次封装的类近期会持续更新,有条件的话,会增加下载、上传、邮件等功能。

shuimiao 发表于 2022-7-5 15:10:20

本帖最后由 shuimiao 于 2022-7-5 15:11 编辑

这个可以。不过我用curl很爽。以前易语言的时候用的winhttp不知道遇到多少问题,不知道是winhttp本身的问题还是封装的问题。比如有些网页无法获取缺失某部分代码(不是指浏览器动态加载那种),或者遇到个别https就是访问失败。而curl完全没问题。导致我现在不想用winhttp

Xelloss0618 发表于 2022-7-5 15:26:06

shuimiao 发表于 2022-7-5 15:10
这个可以。不过我用curl很爽。以前易语言的时候用的winhttp不知道遇到多少问题,不知道是winhttp本身的问题 ...

应该是封装的问题,可以把这些网址发出来研究一下。
WinHTTP 最大的问题是在不同系统,功能不统一。

fengshangren 发表于 2022-7-5 15:58:46

winhttp胜在系统自带,体积小,缺点就是你说的,功能不统一,如果使用不当,很容易导致不同的系统出现BUG,这点最难受,CURL除了体积大一点,其它都没毛病

shuimiao 发表于 2022-7-5 22:48:37

Xelloss0618 发表于 2022-7-5 15:26
应该是封装的问题,可以把这些网址发出来研究一下。
WinHTTP 最大的问题是在不同系统,功能不统一。 ...

网址的话现在没有了,就是当时遇到。而且我现在不用易语言了,就用火山的curl。所以没遇到这种网址了

小蜗牛 发表于 2022-7-6 01:33:17

winhttp在部分操作系统...不稳定,容易蹦,比如2003/2008...curl稳如狗..

糖糖 发表于 2022-9-19 01:35:24

CURL 现在大部分都会被误报!

server 发表于 2022-9-19 01:56:17

学习....            

css 发表于 2022-9-30 11:48:15

支持一下。系统自带的版本问题,默认开启的选项问题,都将影响最终的使用结果。
页: [1]
查看完整版本: 【模块】WinHTTP API 网页访问模块