易语言 http读文件
.版本 2
.程序集 HTTP读文件程序集
.程序集变量 程序集_完整网址, 文本型
.程序集变量 程序集_访问方式, 文本型, , , "GET" or "POST",为空默认"GET"
.程序集变量 程序集_代理地址, 文本型
.程序集变量 程序集_附加协议头, 文本型
.程序集变量 程序集_页面内容, 字节集
.程序集变量 程序集_线程号, 整数型
.程序集变量 程序集_提交信息, 文本型, , , "POST"专用
.子程序 HTTP读文件字集, 字节集, , 有可能线程阻塞,请在外部加超时判断
.参数 参数_完整网址, 文本型
.参数 参数_访问方式, 文本型, 可空, "GET" or "POST",为空默认"GET"
.参数 参数_代理地址, 文本型, 可空
.参数 参数_附加协议头, 文本型, 可空
.参数 参数_提交信息, 文本型, 可空, "POST"专用
.参数 参数_超时值, 整数型, 可空
.局部变量 开始时间, 整数型
程序集_完整网址 = 参数_完整网址
程序集_访问方式 = 参数_访问方式
程序集_代理地址 = 参数_代理地址
程序集_附加协议头 = 参数_附加协议头
程序集_提交信息 = 参数_提交信息
程序集_页面内容 = 取空白字节集 (0)
.如果真 (是否为空 (参数_超时值) 或 参数_超时值 = 0)
参数_超时值 = 8
.如果真结束
开始时间 = 取启动时间 ()
程序集_线程号 = 创建线程 (0, 0, &子程序_读网页, 0, 0, 程序集_线程号)
.判断循环首 (程序集_线程号 > 0)
处理事件 ()
.如果真 (取启动时间 () - 开始时间 > 参数_超时值 × 1000)
销毁线程 (程序集_线程号, 0)
处理事件 ()
程序集_页面内容 = 取空白字节集 (0)
程序集_线程号 = 0
.如果真结束
.判断循环尾 ()
返回 (程序集_页面内容)
.子程序 子程序_读网页
.局部变量 局部_Internet句柄, 整数型
.局部变量 局部_Internet连接句柄, 整数型
.局部变量 局部_HTTP请求句柄, 整数型
.局部变量 局部_域名, 文本型
.局部变量 局部_页面地址, 文本型
.局部变量 局部_整数变量1, 整数型
.局部变量 局部_整数变量2, 整数型
.局部变量 局部_逻辑变量, 逻辑型
.局部变量 局部_文本变量, 文本型
.局部变量 局部_字节集变量, 字节集
局部_域名 = 子程序_取域名 (程序集_完整网址)
局部_页面地址 = 子程序_取页面地址 (程序集_完整网址)
' 建立基础连接
.如果 (删全部空 (程序集_代理地址) = “”)
局部_Internet句柄 = Internet激活 (到文本 (“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”), 1, “”, “”, 0)
.否则
局部_Internet句柄 = Internet激活 (到文本 (“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”), 3, 程序集_代理地址, “”, 0)
输出调试文本 (到文本 (“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”), 3, 到文本 (程序集_代理地址))
.如果结束
.如果真 (局部_Internet句柄 = 0)
程序集_页面内容 = 取空白字节集 (0)
返回 ()
.如果真结束
局部_Internet连接句柄 = Internet建立连接 (局部_Internet句柄, 局部_域名, 子程序_取端口 (程序集_完整网址), “”, “”, 3, 0, 0)
.如果真 (局部_Internet连接句柄 = 0)
程序集_页面内容 = 取空白字节集 (0)
返回 ()
.如果真结束
局部_HTTP请求句柄 = Http创建请求 (局部_Internet连接句柄, 程序集_访问方式, 到文本 (局部_页面地址), “HTTP/1.1”, 到文本 (“”), 到文本 (“”), 2147483648, 0)
.如果真 (局部_HTTP请求句柄 = 0)
程序集_页面内容 = 取空白字节集 (0)
返回 ()
.如果真结束
' 补充协议头
.如果真 (寻找文本 (程序集_附加协议头, “Accept: ”, 1, 真) = -1)
程序集_附加协议头 = 程序集_附加协议头 + “Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*” + #换行符
.如果真结束
.如果真 (寻找文本 (程序集_附加协议头, “Referer: ”, 1, 真) = -1)
程序集_附加协议头 = 程序集_附加协议头 + “Referer: ” + 程序集_完整网址 + #换行符
.如果真结束
.如果真 (寻找文本 (程序集_附加协议头, “Accept-Language: ”, 1, 真) = -1)
程序集_附加协议头 = 程序集_附加协议头 + “Accept-Language: zh-cn” + #换行符
.如果真结束
' 附带信息发送请求
.判断开始 (程序集_访问方式 = “” 或 程序集_访问方式 = “GET”)
Http发送请求 (局部_HTTP请求句柄, 程序集_附加协议头, 取文本长度 (程序集_附加协议头), “”, 0)
.判断 (程序集_访问方式 = “POST”)
.如果真 (程序集_提交信息 ≠ “”)
程序集_附加协议头 = 程序集_附加协议头 + “Content-Type: application/x-www-form-urlencoded” + #换行符
程序集_附加协议头 = 程序集_附加协议头 + “Content-Length: ” + 到文本 (取文本长度 (程序集_提交信息)) + #换行符
.如果真结束
Http发送请求 (局部_HTTP请求句柄, 程序集_附加协议头, 取文本长度 (程序集_附加协议头), 程序集_提交信息, 取文本长度 (程序集_提交信息))
.默认
程序集_页面内容 = 取空白字节集 (0)
返回 ()
.判断结束
' 读取页面文本
局部_逻辑变量 = 真
局部_整数变量1 = 0
.判断循环首 (局部_逻辑变量)
局部_字节集变量 = 取空白字节集 (512)
处理事件 ()
Internet读文件 (局部_HTTP请求句柄, 局部_字节集变量, 取字节集长度 (局部_字节集变量), 局部_整数变量1)
.如果 (局部_整数变量1 = 0)
局部_逻辑变量 = 假
.否则
程序集_页面内容 = 程序集_页面内容 + 取字节集左边 (局部_字节集变量, 局部_整数变量1)
.如果结束
.判断循环尾 ()
' 取服务器回传协议头
局部_文本变量 = 取空白文本 (1024)
HTTP查询信息 (局部_HTTP请求句柄, 22, 局部_文本变量, 1024, 0)
' 关闭句柄
Internet关闭句柄 (局部_HTTP请求句柄)
Internet关闭句柄 (局部_Internet连接句柄)
Internet关闭句柄 (局部_Internet句柄)
' 设置COOKIE
.如果真 (寻找文本 (局部_文本变量, “Set-Cookie: ”, 1, 真) > 0)
局部_整数变量1 = 打开内存文件 ()
写出文本 (局部_整数变量1, 局部_文本变量)
移到文件首 (局部_整数变量1)
.判断循环首 (是否在文件尾 (局部_整数变量1, 假) = 假)
局部_文本变量 = 读入一行 (局部_整数变量1)
.如果真 (寻找文本 (局部_文本变量, “Set-Cookie: ”, 1, 真) > 0)
局部_文本变量 = 文本替换 (局部_文本变量, 1, 12, )
局部_整数变量2 = 寻找文本 (局部_文本变量, “=”, 1, 真)
设置COOKIE (“http://” + 局部_域名, 取文本左边 (局部_文本变量, 局部_整数变量2 - 1), 取文本右边 (局部_文本变量, 取文本长度 (局部_文本变量) - 局部_整数变量2))
.如果真结束
.判断循环尾 ()
关闭文件 (局部_整数变量1)
.如果真结束
程序集_线程号 = 0
.子程序 子程序_取域名, 文本型
.参数 参数_网址, 文本型
.局部变量 局部_符号位置, 整数型
.局部变量 局部_域名, 文本型
.如果 (文本比较 (取文本左边 (参数_网址, 7), “http://”, 假) ≠ 0)
局部_符号位置 = 寻找文本 (参数_网址, “/”, , 真)
.如果 (局部_符号位置 > 0)
局部_域名 = 取文本左边 (参数_网址, 局部_符号位置 - 1)
.否则
局部_域名 = 参数_网址
.如果结束
.否则
局部_符号位置 = 寻找文本 (参数_网址, “/”, 8, 真)
.如果 (局部_符号位置 > 0)
局部_域名 = 取文本中间 (参数_网址, 8, 局部_符号位置 - 8)
.否则
局部_域名 = 文本替换 (参数_网址, 1, 7, )
.如果结束
.如果结束
局部_符号位置 = 寻找文本 (局部_域名, “:”, 1, 真)
.如果真 (局部_符号位置 > 0)
局部_域名 = 取文本左边 (局部_域名, 局部_符号位置 - 1)
.如果真结束
返回 (到小写 (局部_域名))
.子程序 子程序_取页面地址, 文本型
.参数 参数_网址, 文本型
.局部变量 局部_页面地址, 文本型
.局部变量 局部_符号位置, 整数型
.局部变量 局部_域名, 文本型
局部_域名 = 子程序_取域名 (参数_网址)
局部_符号位置 = 寻找文本 (参数_网址, “/”, 寻找文本 (参数_网址, 局部_域名, 1, 真), 真)
.如果 (局部_符号位置 > 0)
局部_页面地址 = 取文本右边 (参数_网址, 取文本长度 (参数_网址) - 局部_符号位置 + 1)
.否则
局部_页面地址 = “/”
.如果结束
返回 (局部_页面地址)
.子程序 子程序_取端口, 整数型
.参数 参数_网址, 文本型
.局部变量 局部_符号位置, 整数型
.局部变量 局部_域名, 文本型
.如果 (文本比较 (取文本左边 (参数_网址, 7), “http://”, 假) ≠ 0)
局部_符号位置 = 寻找文本 (参数_网址, “/”, , 真)
.如果 (局部_符号位置 > 0)
局部_域名 = 取文本左边 (参数_网址, 局部_符号位置 - 1)
.否则
局部_域名 = 参数_网址
.如果结束
.否则
局部_符号位置 = 寻找文本 (参数_网址, “/”, 8, 真)
.如果 (局部_符号位置 > 0)
局部_域名 = 取文本中间 (参数_网址, 8, 局部_符号位置 - 8)
.否则
局部_域名 = 文本替换 (参数_网址, 1, 7, )
.如果结束
.如果结束
局部_符号位置 = 寻找文本 (局部_域名, “:”, 1, 真)
.如果 (局部_符号位置 > 0)
局部_域名 = 取文本右边 (局部_域名, 取文本长度 (局部_域名) - 局部_符号位置)
.否则
局部_域名 = “80”
.如果结束
返回 (到数值 (局部_域名))
.版本 2
.DLL命令 创建线程, 整数型, , "CreateThread", , 彗星读文件
.参数 lpThreadAttributes, 整数型
.参数 dwStackSize, 整数型
.参数 lpStartAddress, 子程序指针
.参数 lpParameter, 整数型
.参数 dwCreationFlags, 整数型
.参数 lpThreadId, 整数型, 传址
.DLL命令 销毁线程, , , "TerminateThread", , 彗星读文件
.参数 hThread, 整数型
.参数 dwExitCode, 整数型
.DLL命令 Internet激活, 整数型, "wininet.dll", "InternetOpenA", , 彗星读文件
.参数 句柄名称, 文本型, 传址
.参数 连接类型, 整数型, , 1直接连接;3代理连接
.参数 代理地址, 文本型, 传址
.参数 代理掩码, 文本型, 传址
.参数 dwFlags, 整数型, , 0
.DLL命令 Internet建立连接, 整数型, "wininet.dll", "InternetConnectA", , 彗星读文件
.参数 Internet句柄, 整数型
.参数 域名, 文本型, 传址
.参数 服务器端口, 整数型, , 80HTTP;21FTP;
.参数 用户名, 文本型, 传址, 空
.参数 用户口令, 文本型, 传址, 空
.参数 服务类型, 整数型, , 1FTP;3HTTP
.参数 dwFlags, 整数型, , 0http;134217728被动FTP模式
.参数 dwContext, 整数型, , 0
.DLL命令 Http创建请求, 整数型, "wininet.dll", "HttpOpenRequestA", , 彗星读文件
.参数 Internet连接句柄, 整数型, , 由Internet建立连接返回
.参数 访问方式, 文本型, 传址, "GET" or "POST"为空默认GET
.参数 页面路径, 文本型, 传址, 简短路径,不带域名
.参数 协议版本, 文本型, 传址, 为空默认HTTP/1.1
.参数 引用页, 文本型, 传址, 可为空
.参数 识别类型, 文本型, 传址, 可为空
.参数 dwFlags, 整数型, , 2147483648更新下载
.参数 dwContext, 整数型, , 0
.DLL命令 Http发送请求, 逻辑型, "wininet.dll", "HttpSendRequestA", , 彗星读文件
.参数 HTTP请求句柄, 整数型
.参数 sHeaders, 文本型, 传址
.参数 lHeadersLength, 整数型
.参数 sOptional, 文本型, 传址
.参数 lOptionalLength, 整数型
.DLL命令 Internet读文件, 逻辑型, "wininet.dll", "InternetReadFile", , 彗星读文件
.参数 HTTP请求句柄, 整数型
.参数 sBuffer, 字节集, 传址
.参数 lNumBytesToRead, 整数型
.参数 lNumberOfBytesRead, 整数型, 传址
.DLL命令 HTTP查询信息, 逻辑型, "wininet.dll", "HttpQueryInfoA", , 彗星读文件
.参数 Internet请求句柄, 整数型
.参数 待查信息, 整数型, , 22返回所有信息;43SET_COOKIE;+2147483648返回文本
.参数 返回容器, 文本型, 传址
.参数 返回容器长度, 整数型, 传址
.参数 lpdwIndex, 整数型
.DLL命令 Internet关闭句柄, 逻辑型, "wininet.dll", "InternetCloseHandle", , 彗星读文件
.参数 句柄, 整数型
.DLL命令 设置COOKIE, 逻辑型, "wininet.dll", "InternetSetCookieA", , 彗星读文件
.参数 域名, 文本型, 传址
.参数 名称, 文本型, 传址
.参数 内容, 文本型, 传址