|
发表于 2012-12-3 23:22:02
|
显示全部楼层
广东省广州市
[e]
.版本 2
.支持库 spec
.子程序 http文件下载, 整数型, 公开, 只支持Http协议 返回0.正常 1.创建对象失败 2.绑定本地端口失败 3.连接服务器失败 4.数据发送超时 5.下载效检失败 6.服务器原因下载失败例如网页不存在等 7.停止下载
.参数 下载地址, 文本型, , 完整路径包括http://
.参数 保存路径, 文本型, 可空, 下载保存本地路径 如果保存地址为空 则只读取文件
.参数 文件大小, 整数型, 参考 可空, 传递变量,返回文件大小
.参数 已下载大小, 整数型, 参考 可空, 传递变量,返回已下载大小
.参数 超时时间, 整数型, 可空, 下载超时默认15秒
.参数 缓冲区大小, 整数型, 可空, 默认10240字节
.参数 只获取文件大小不下载, 逻辑型, 可空, 如果真 返回变量文件大小 默认假
.参数 Cookie, 文本型, 可空, Cookie不需要可以留空
.参数 来源网址, 文本型, 可空
.参数 返回值, 字节集, 参考 可空, 传递变量,如果保存地址为空 则读取的数据返回这个变量
.局部变量 i, 整数型
.局部变量 分割文件路径, 文本型, , "0"
.局部变量 分割文件名, 文本型, , "0"
.局部变量 位置首, 整数型
.局部变量 位置尾, 整数型
.局部变量 文件号, 整数型
.局部变量 数据位置, 整数型
.局部变量 文件名, 文本型
.局部变量 文件, 文本型, , "0"
.局部变量 地址, 文本型
.局部变量 文件路径, 文本型
.局部变量 数据, 字节集
.局部变量 第一次发送, 整数型
.局部变量 缓冲数据, 字节集
.局部变量 记录文件名, 文本型
.局部变量 记录文件号, 整数型
.局部变量 断点续传, 逻辑型
.局部变量 数据头, 文本型
.局部变量 端口, 短整数型
.局部变量 分割地址, 文本型, , "0"
.局部变量 替换地址, 文本型
.局部变量 截取大小文本, 字节集
停止 = 假
数据头 = “”
.如果真 (缓冲区大小 = 0)
缓冲区大小 = 10240
.如果真结束
文件 = 分割文本 (下载地址, “/”, )
替换地址 = 文件 [3]
.如果 (寻找文本 (替换地址, “:”, , 假) ≠ -1)
分割地址 = 分割文本 (替换地址, “:”, )
替换地址 = 分割地址 [1]
端口 = 到短整数 (分割地址 [2])
地址 = 替换地址 + “:” + 到文本 (端口)
.否则
端口 = 80
地址 = 替换地址
.如果结束
文件名 = 文件 [取数组成员数 (文件)]
.如果 (下载数据.创建 ())
.如果 (下载数据.绑定 (0))
.如果 (下载数据.连接 (替换地址, 端口))
.如果 (保存路径 = “”)
.否则
文件路径 = 保存路径
.' 如果真 (是否自动重命名)
.' 如果真 (文件是否存在 (文件路径))
.' 计次循环首 (100, i)
' 文件名 = 子文本替换 (文件名, “(” + 到文本 (i - 1) + “).”, “(” + 到文本 (i) + “).”, , 1, 真)
' 文件路径 = 子文本替换 (文件路径, “(” + 到文本 (i - 1) + “).”, “(” + 到文本 (i) + “).”, , 1, 真)
' 分割文件路径 = 分割文本 (文件路径, “.”, )
' 分割文件名 = 分割文本 (文件名, “.”, )
.' 如果真 (寻找文本 (文件名, “(” + 到文本 (i) + “).”, 1, 假) = -1)
' 文件名 = 分割文件名 [1] + “(” + 到文本 (i) + “).” + 分割文件名 [2]
' 文件路径 = 分割文件路径 [1] + “(” + 到文本 (i) + “).” + 分割文件路径 [2]
.如果真结束
.' 如果真 (文件是否存在 (文件路径) = 假)
' 跳出循环 ()
.如果真结束
.' 计次循环尾 ()
.如果真结束
.如果真结束
.如果结束
.如果 (文件是否存在 (文件路径 + “.tmp”))
数据头 = “GET /”
数据头 = 数据头 + 子文本替换 (下载地址, “http://” + 地址 + “/”, “”, 1, 1, 真) + “ HTTP/1.1” + #换行符
数据头 = 数据头 + “Accept: */*” + #换行符
数据头 = 数据头 + “Referer: ” + 来源网址 + #换行符
数据头 = 数据头 + “User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)” + #换行符
数据头 = 数据头 + “Referer: ” + 来源网址 + #换行符
数据头 = 数据头 + “Accept-Encoding: gzip, deflate” + #换行符
数据头 = 数据头 + “UA-CPU: x86” + #换行符
数据头 = 数据头 + “Range: bytes=” + 到文本 (取文件尺寸 (文件路径 + “.tmp”)) + “-” + #换行符
数据头 = 数据头 + “Pragma: no-cache” + #换行符
数据头 = 数据头 + “Cache-Control: no-cache” + #换行符
数据头 = 数据头 + “Host: ” + 地址 + #换行符
数据头 = 数据头 + “Connection: Keep-Alive” + #换行符
.如果真 (Cookie ≠ “”)
数据头 = 数据头 + “Cookie: ” + Cookie + #换行符
.如果真结束
数据头 = 数据头 + #换行符 + #换行符
.如果 (下载数据.发送 (到字节集 (数据头)) ≠ -1)
断点续传 = 真
.否则
返回 (4)
.如果结束
.否则
数据头 = “GET /” + 子文本替换 (下载地址, “http://” + 地址 + “/”, “”, 1, 1, 真) + “ HTTP/1.1” + #换行符
数据头 = 数据头 + “Accept: */*” + #换行符
数据头 = 数据头 + “Accept-Language: zh-cn” + #换行符
数据头 = 数据头 + “User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;Trident/5.0)” + #换行符
数据头 = 数据头 + “Content-Type: application/octet-stream” + #换行符
数据头 = 数据头 + “Referer: ” + 来源网址 + #换行符
数据头 = 数据头 + “Accept-Encoding: gzip, deflate” + #换行符
' 数据头 = 数据头 + “UA-CPU: x86” + #换行符
数据头 = 数据头 + “Host: ” + 地址 + #换行符
数据头 = 数据头 + “Connection: Keep-Alive” + #换行符
.如果真 (Cookie ≠ “”)
数据头 = 数据头 + “Cookie: ” + Cookie + #换行符
.如果真结束
数据头 = 数据头 + #换行符 + #换行符
.如果 (下载数据.发送 (到字节集 (数据头)) ≠ -1)
.否则
返回 (4)
.如果结束
.如果结束
.判断循环首 (下载数据.接收 (数据, 15))
.如果 (第一次发送 = 0)
.如果 (寻找字节集 (数据, 到字节集 (“HTTP/1.1”), 1) ≠ -1)
.否则
返回 (6)
.如果结束
' Content-length:
截取大小文本 = 到字节集 (到小写 (到文本 (数据)))
调试输出 (到文本 (数据))
位置首 = 寻找字节集 (截取大小文本, 到字节集 (到小写 (“Content-Length: ”)), )
位置首 = 位置首 + 16
位置尾 = 寻找字节集 (截取大小文本, 到字节集 (#换行符), 位置首)
位置尾 = 位置尾 - 位置首
.如果 (断点续传)
文件大小 = 取文件尺寸 (文件路径 + “.tmp”) + 到整数 (到文本 (取字节集中间 (截取大小文本, 位置首, 位置尾)))
.否则
文件大小 = 到整数 (到文本 (取字节集中间 (截取大小文本, 位置首, 位置尾)))
.如果结束
.如果真 (只获取文件大小不下载)
下载数据.关闭 ()
返回 (0)
.如果真结束
数据位置 = 寻找字节集 (数据, 到字节集 (#换行符 + #换行符), 1)
.如果 (保存路径 = “”)
返回值 = 取字节集右边 (数据, 取字节集长度 (数据) - 数据位置 - 3)
.否则
文件号 = 打开文件 (文件路径 + “.tmp”, 5, )
移到文件尾 (文件号)
写出字节集 (文件号, 取字节集右边 (数据, 取字节集长度 (数据) - 数据位置 - 3))
.如果结束
.如果 (断点续传)
已下载大小 = 取文件尺寸 (文件路径 + “.tmp”) + 取字节集长度 (取字节集右边 (数据, 取字节集长度 (数据) - 数据位置 - 3))
.否则
已下载大小 = 取字节集长度 (取字节集右边 (数据, 取字节集长度 (数据) - 数据位置 - 3))
.如果结束
第一次发送 = 1
.否则
缓冲数据 = 缓冲数据 + 数据
.如果真 (取字节集长度 (缓冲数据) ≥ 缓冲区大小)
.如果 (保存路径 = “”)
返回值 = 返回值 + 缓冲数据
.否则
移到文件尾 (文件号)
写出字节集 (文件号, 缓冲数据)
.如果结束
缓冲数据 = { }
.如果真结束
已下载大小 = 已下载大小 + 取字节集长度 (数据)
.如果结束
.如果真 (已下载大小 = 文件大小)
跳出循环 ()
.如果真结束
.判断循环尾 ()
.如果真 (取字节集长度 (缓冲数据) ≠ 0)
.如果 (保存路径 = “”)
返回值 = 返回值 + 缓冲数据
.否则
移到文件尾 (文件号)
写出字节集 (文件号, 缓冲数据)
.如果结束
缓冲数据 = { }
.如果真结束
数据 = { }
.如果 (保存路径 = “”)
返回 (0)
.否则
关闭文件 (文件号)
关闭文件 (记录文件号)
.如果 (停止)
返回 (7)
.否则
.如果 (取文件尺寸 (文件路径 + “.tmp”) = 文件大小)
删除文件 (文件路径)
文件更名 (文件路径 + “.tmp”, 文件路径)
返回 (0)
.否则
删除文件 (文件路径 + “.tmp”)
返回 (5)
.如果结束
.如果结束
.如果结束
.否则
返回 (3)
.如果结束
.否则
返回 (2)
.如果结束
.否则
返回 (1)
[/e] |
|