专注于网络营销软件及自动办公软件开发

易语言HTTP客户端源码

时间:2012-07-25 / 分类:技术文章 / 评论:暂无 / 浏览: 13,384


.版本 2

.程序集 HTTP客户端, , 公开, 提供HTTP客户端功能的封装。支持同步 异步方式从服务器获取数据。
.程序集变量 __回调函数, 子程序指针
.程序集变量 对象, 对象
.程序集变量 事件对象方法集, 子程序指针, , “8”
.程序集变量 事件对象结构, 对象附加数据
.程序集变量 事件对象指针, 整数型
.程序集变量 e, 对象
.程序集变量 原壳数据, 整数型
.程序集变量 __网络地址, 文本型

.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用
.局部变量 pthis, 整数型

置入代码 ({ 139, 69, 8, 139, 0, 137, 69, 252 })
子程序指针_重置 (__回调函数)
__网络地址 = “”
事件对象方法集 [1] = &QueryInterface
事件对象方法集 [2] = &AddRef
事件对象方法集 [3] = &Release
事件对象方法集 [4] = &GetTypeInfoCount
事件对象方法集 [5] = &GetTypeInfo
事件对象方法集 [6] = &GetIDsOfNames
事件对象方法集 [7] = &Invoke ‘ 从这里引出事件

事件对象结构.ppv = 子程序指针_地址 (事件对象方法集 [1])
事件对象结构.成员 = pthis
事件对象指针 = 整数_地址 (事件对象结构.ppv)
‘ 借壳
赋值整数_API (原壳数据, e, 4)
赋值对象_API (e, 事件对象指针, 4)
CoInitialize (0)

.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用

‘ 还壳
赋值对象_API (e, 原壳数据, 4)
CoUninitialize ()

.子程序 状态改变, , 公开, 如果采用继承模式。覆盖这个方法。请求完成后。这个方法会被系统调用。
.局部变量 a, 整数型

a = 对象.读数值属性 (“readyState”, )
置入代码 ({ 139, 93, 8, 139, 27, 131, 195, 4, 139, 19, 133, 210, 116, 5, 255, 117, 252, 255, 210 })

.子程序 打开, , 公开
.参数 方法, 文本型, 参考, POST 或者 GET
.参数 URL, 文本型, 参考
.参数 异步, 逻辑型, 可空, 默认为假
.参数 回调函数, 子程序指针, 可空, 如果为空。则不处理返回结果。如果你通过继承处理。则覆盖基类的方法原型为 <无返回值> 状态改变()

.如果真 (假 = 对象.创建 (“WinHttp.WinHttpRequest.5.1”, ))
.如果真 (假 = 对象.创建 (“MSXML2.XMLHTTP.4.0”, ))
.如果真 (假 = 对象.创建 (“MSXML2.XMLHTTP.3.0”, ))
.如果真 (假 = 对象.创建 (“MSXML2.XMLHTTP”, ))
.如果真 (假 = 对象.创建 (“Microsoft.XMLHTTP”, ))
输出调试文本 (“错误:创建XMLHTTP对象失败。”)
返回 ()
.如果真结束

.如果真结束

.如果真结束

.如果真结束

.如果真结束

.如果真 (异步) ‘ 异步则出发事件
对象.写属性 (“onreadystatechange”, e)
.如果真结束
.如果 (异步 且 假 = 是否为空 (回调函数))
__回调函数 = 回调函数
.否则
子程序指针_重置 (__回调函数)
.如果结束
对象.方法 (“Open”, 方法, URL, 异步)
对象.方法 (“setRequestHeader”, “Accept-Language”, “zh-cn”)
‘ 对象.方法 (“setRequestHeader”, “Accept-Encoding”, “gzip, deflate”)

.子程序 置请求协议头, , 公开, 注意:在打开()方法后才能设置方能有效。
.参数 名字, 文本型, 参考
.参数 值, 文本型, 参考

.如果真 (假 = 对象.是否为空 ())
对象.方法 (“setRequestHeader”, 名字, 值)
.如果真结束

.子程序 发送, , 公开
.参数 数据, 文本型, 参考 可空

.如果 (假 = 是否为空 (数据))
对象.方法 (“send”, 数据)
.否则
对象.方法 (“send”, )
.如果结束

.子程序 取文本, 文本型, 公开

.如果真 (假 = 对象.是否为空 ())
返回 (对象.读文本属性 (“responseText”, ))
.如果真结束
返回 (“”)

.子程序 取字节集, 字节集, 公开

.如果真 (假 = 对象.是否为空 ())
返回 (对象.读属性 (“responseBody”, ).取字节集 ())
.如果真结束
返回 ({ })

.子程序 返回状态, 整数型, 公开, 返回状态 200 成功

返回 (对象.读数值属性 (“status”, ))

.子程序 撤消, , 公开, 失败返回空文本。

.如果真 (假 = 对象.是否为空 ())
对象.方法 (“abortn ”, )
.如果真结束

.子程序 取所有返回头信息, 文本型, 公开, 失败返回空文本。

.如果真 (假 = 对象.是否为空 ())
返回 (对象.文本方法 (“getAllResponseHeaders”, ))
.如果真结束
返回 (“”)

.子程序 取返回头信息, 文本型, 公开
.参数 名字, 文本型, 参考

.如果真 (假 = 对象.是否为空 ())
返回 (对象.文本方法 (“getResponseHeader”, 名字))
.如果真结束
返回 (“”)

.子程序 取进度, 整数型, 公开, 0:未初始化 1:初始化(尚未发送) 2:发送数据 3:数据发送中 4:完成

.如果真 (假 = 对象.是否为空 ())
返回 (对象.读数值属性 (“readyState”, ))
.如果真结束
返回 (0)

.子程序 等待完成, 逻辑型, 公开
.参数 超时, 整数型

返回 (对象.逻辑方法 (“WaitForResponse”, 超时))

作者:GBB(龚辟愚)

完整源码下载:
百度网盘下载

分享到: