易语言

关注公众号 jb51net

关闭
首页 > 软件编程 > 易语言 > 易语言网页操作纯源码

易语言进行网页操作方法

投稿:laozhang

在本篇内容中小编给大家分享是的易语言进行网页操作的相关知识点以及源码,需要的朋友们参考下。

首先展示下功能(看图片)

本代码附加了DLL代码命令,会以不同的颜色标注,也可以全部复制后张贴到易语言新建的一个程序集名中,易语言会智能的分开DLL和子程序。

相关源码:

.版本 2

.程序集 网页操作累

.子程序 HTTP读文本, 文本型, 公开, 有可能线程阻塞,请在外部加超时判断
.参数 完整网址, 文本型
.参数 访问方式, 文本型, 可空, "GET" or "POST",为空默认"GET"
.参数 代理地址, 文本型, 可空
.参数 附加协议头, 文本型, 可空
.参数 提交信息, 文本型, 可空, "POST"专用
.参数 网页头, 文本型, 参考 可空, 返回网页头部信息

返回 (到文本 (HTTP网页访问 (完整网址, 访问方式, 代理地址, 附加协议头, 提交信息, 网页头)))

.子程序 HTTP网页访问, 字节集, 公开, 有可能线程阻塞,请在外部加超时判断
.参数 完整网址, 文本型, , “http://”
.参数 访问方式, 文本型, 可空, "GET" or "POST",为空默认"GET"
.参数 代理地址, 文本型, 可空
.参数 附加协议头, 文本型, 可空
.参数 提交信息, 文本型, 可空, "POST"专用
.参数 网页头, 文本型, 参考 可空, 返回网页头部信息
.局部变量 请求句柄, 整数型
.局部变量 连接句柄, 整数型
.局部变量 返回句柄, 整数型
.局部变量 域名, 文本型
.局部变量 页面地址, 文本型
.局部变量 已读字节, 整数型
.局部变量 Cookie位置, 整数型
.局部变量 内存号, 整数型
.局部变量 字节集容器, 字节集
.局部变量 返回字集, 字节集

页面地址 = 取页面地址 (完整网址)
域名 = 取域名 (完整网址)
' 建立基本连接
.如果 (删全部空 (代理地址) = “”)
  请求句柄 = InternetOpen (到文本 (“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”), 1, 字符 (0), 字符 (0), 0)
.否则
  请求句柄 = InternetOpen (到文本 (“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”), 3, 到文本 (“http=” + 代理地址), 字符 (0), 0)
.如果结束
.如果真 (请求句柄 = 0)
  返回字集 = 取空白字节集 (0)
  返回 (取空白字节集 (255))
.如果真结束
连接句柄 = InternetConnect (请求句柄, 域名, 取端口 (完整网址), “”, “”, 3, 0, 0)
.如果真 (连接句柄 = 0)
  InternetCloseHandle (请求句柄)
  返回字集 = 取空白字节集 (0)
  返回 (取空白字节集 (255))
.如果真结束
返回句柄 = HttpOpenRequest (连接句柄, 访问方式, 页面地址, “HTTP/1.1”, 字符 (0), 字符 (0), 2147483648, 0)
.如果真 (返回句柄 = 0)
  InternetCloseHandle (连接句柄)
  InternetCloseHandle (请求句柄)
  返回字集 = 取空白字节集 (0)
  返回 (取空白字节集 (255))
.如果真结束
' 补充协议头
.如果真 (寻找文本 (附加协议头, “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”)
  HttpSendRequest (返回句柄, 附加协议头, 取文本长度 (附加协议头), 字符 (0), 0)
.判断 (到大写 (访问方式) = “POST”)
  .如果真 (提交信息 ≠ “”)
    .如果真 (寻找文本 (附加协议头, “Content-Type: ”, 1, 真) = -1)
      附加协议头 = 附加协议头 + “Content-Type: application/x-www-form-urlencoded” + #换行符
    .如果真结束
    附加协议头 = 附加协议头 + “Content-Length: ” + 到文本 (取文本长度 (提交信息)) + #换行符
  .如果真结束
  HttpSendRequest (返回句柄, 附加协议头, 取文本长度 (附加协议头), 提交信息, 取文本长度 (提交信息))
.默认
  InternetCloseHandle (连接句柄)
  InternetCloseHandle (请求句柄)
  InternetCloseHandle (返回句柄)
  返回字集 = 取空白字节集 (0)
  返回 (取空白字节集 (255))
.判断结束
' 读取页面文本
内存号 = 打开内存文件 ()
字节集容器 = 取空白字节集 (2048)
.循环判断首 ()
  处理事件 ()
  InternetReadFile (返回句柄, 字节集容器, 取字节集长度 (字节集容器), 已读字节)
  写出字节集 (内存号, 取字节集左边 (字节集容器, 已读字节))
  ' 返回字集 = 返回字集 + 取字节集左边 (字节集容器, 已读字节)
.循环判断尾 (已读字节 ≠ 0)
移到文件首 (内存号)
返回字集 = 读入字节集 (内存号, 取文件长度 (内存号))
关闭文件 (内存号)
' 取服务器回传协议头
网页头 = 取空白文本 (1024)
HttpQueryInfo (返回句柄, 22, 网页头, 1024, 0)
' 关闭句柄
InternetCloseHandle (返回句柄)
InternetCloseHandle (连接句柄)
InternetCloseHandle (请求句柄)
' 设置COOKIE
.如果真 (寻找文本 (网页头, “Set-Cookie: ”, 1, 真) > 0)
  内存号 = 打开内存文件 ()
  写出文本 (内存号, 网页头)
  移到文件首 (内存号)
  .判断循环首 (是否在文件尾 (内存号, 假) = 假)
    网页头 = 读入一行 (内存号)
    .如果真 (寻找文本 (网页头, “Set-Cookie: ”, 1, 真) > 0)
      网页头 = 文本替换 (网页头, 1, 12, )
      Cookie位置 = 寻找文本 (网页头, “=”, 1, 真)
      InternetSetCookie (“http://” + 域名, 取文本左边 (网页头, Cookie位置 - 1), 取文本右边 (网页头, 取文本长度 (网页头) - Cookie位置))
    .如果真结束
    处理事件 ()
  .判断循环尾 ()
  关闭文件 (内存号)
.如果真结束
返回 (返回字集)

.子程序 打开指定网址, 逻辑型, 公开, 打开指定网址(成功返回真,失败返回假)
.参数 要打开的网址, 文本型, , 欲打开的网页地址

.如果 (_执行 (0, “open”, “explorer.exe”, 要打开的网址, “”, 1) = 2)
  返回 (假)
.否则
  返回 (真)
.如果结束


.子程序 URL编码_UTF8, 文本型, 公开, 返回已编码的URL
.参数 Bin_URL, 文本型
.局部变量 局部_数据, 字节集
.局部变量 局部_数据1, 字节集
.局部变量 i, 整数型
.局部变量 ii, 文本型

局部_数据 = 编码转换 (到字节集 (Bin_URL), “GBK”, “utf-8”, 3)
局部_数据 = 取字节集左边 (局部_数据, 取字节集长度 (局部_数据) - 1)
.计次循环首 (取字节集长度 (局部_数据), i)
  .如果 (到整数 (局部_数据 [i]) ≥ 48 且 到整数 (局部_数据 [i]) ≤ 57 或 到整数 (局部_数据 [i]) ≥ 65 且 到整数 (局部_数据 [i]) ≤ 90 或 到整数 (局部_数据 [i]) ≥ 65 且 到整数 (局部_数据 [i]) ≤ 90 或 到整数 (局部_数据 [i]) ≥ 97 且 到整数 (局部_数据 [i]) ≤ 122)
    ii = ii + 字符 (局部_数据 [i])
  .否则
    ii = ii + “%” + 取十六进制文本 (局部_数据 [i])
  .如果结束

.计次循环尾 ()
返回 (ii)

.子程序 URL编码, 文本型, 公开, 返回已编码的URL
.参数 Bin_URL, 文本型
.局部变量 局部_数据, 字节集
.局部变量 i, 整数型
.局部变量 ii, 文本型

局部_数据 = 到字节集 (Bin_URL)
.计次循环首 (取字节集长度 (局部_数据), i)
  .如果 (到整数 (局部_数据 [i]) ≥ 48 且 到整数 (局部_数据 [i]) ≤ 57 或 到整数 (局部_数据 [i]) ≥ 65 且 到整数 (局部_数据 [i]) ≤ 90 或 到整数 (局部_数据 [i]) ≥ 65 且 到整数 (局部_数据 [i]) ≤ 90 或 到整数 (局部_数据 [i]) ≥ 97 且 到整数 (局部_数据 [i]) ≤ 122)
    ii = ii + 字符 (局部_数据 [i])
  .否则
    ii = ii + “%” + 取十六进制文本 (局部_数据 [i])
  .如果结束

.计次循环尾 ()
返回 (ii)

.子程序 URL解码_UTF8, 文本型, 公开, 返回已解码的URL
.参数 Bin_URL, 文本型, , 欲解码的文本
.局部变量 循环容器, 整数型
.局部变量 Len, 整数型
.局部变量 HEX, 文本型
.局部变量 目标, 文本型
.局部变量 H, 整数型
.局部变量 L, 整数型

Len = 取文本长度 (Bin_URL)
循环容器 = 1
HEX = “0123456789ABCDEF”
.判断循环首 (循环容器 ≤ Len)
  .判断开始 (取文本中间 (Bin_URL, 循环容器, 1) ≠ “%”)
    目标 = 目标 + 取文本中间 (Bin_URL, 循环容器, 1)
  .默认
    循环容器 = 循环容器 + 1
    H = 寻找文本 (HEX, 到大写 (取文本中间 (Bin_URL, 循环容器, 1)), , 假) - 1
    循环容器 = 循环容器 + 1
    L = 寻找文本 (HEX, 到大写 (取文本中间 (Bin_URL, 循环容器, 1)), , 假) - 1
    目标 = 目标 + 字符 (H × 16 + L)
  .判断结束
  循环容器 = 循环容器 + 1
.判断循环尾 ()
返回 (到文本 (编码转换 (到字节集 (目标), “utf-8”, “GBK”)))

.子程序 URL解码, 文本型, 公开, 返回已解码的URL
.参数 Bin_URL, 文本型, , 欲解码的文本
.局部变量 循环容器, 整数型
.局部变量 Len, 整数型
.局部变量 HEX, 文本型
.局部变量 目标, 文本型
.局部变量 H, 整数型
.局部变量 L, 整数型

Len = 取文本长度 (Bin_URL)
循环容器 = 1
HEX = “0123456789ABCDEF”
.判断循环首 (循环容器 ≤ Len)
  .判断开始 (取文本中间 (Bin_URL, 循环容器, 1) ≠ “%”)
    目标 = 目标 + 取文本中间 (Bin_URL, 循环容器, 1)
  .默认
    循环容器 = 循环容器 + 1
    H = 寻找文本 (HEX, 到大写 (取文本中间 (Bin_URL, 循环容器, 1)), , 假) - 1
    循环容器 = 循环容器 + 1
    L = 寻找文本 (HEX, 到大写 (取文本中间 (Bin_URL, 循环容器, 1)), , 假) - 1
    目标 = 目标 + 字符 (H × 16 + L)
  .判断结束
  循环容器 = 循环容器 + 1
.判断循环尾 ()
返回 (目标)

.子程序 取页面地址, 文本型
.参数 网址, 文本型
.局部变量 页面地址, 文本型
.局部变量 符号位置, 整数型
.局部变量 域名, 文本型

域名 = 取域名 (网址)
符号位置 = 寻找文本 (网址, “/”, 寻找文本 (网址, 域名, 1, 真), 真)
.如果 (符号位置 > 0)
  页面地址 = 取文本右边 (网址, 取文本长度 (网址) - 符号位置 + 1)
.否则
  页面地址 = “/”
.如果结束
返回 (页面地址)

.子程序 取端口, 整数型
.参数 网址, 文本型
.局部变量 dwNumber, 整数型
.局部变量 szServerName, 文本型

szServerName = 取域名 (网址, 真)
dwNumber = 寻找文本 (szServerName, “:”, , 假)
dwNumber = 选择 (dwNumber = -1, 80, 到数值 (取文本右边 (szServerName, 取文本长度 (szServerName) - dwNumber)))
返回 (dwNumber)

.子程序 取域名, 文本型
.参数 网址, 文本型
.参数 不过滤端口, 逻辑型, 可空
.局部变量 dwNumber, 整数型
.局部变量 dwLast, 整数型
.局部变量 szServerName, 文本型
.局部变量 临时文本, 文本型
.局部变量 网址头, 整数型

szServerName = 网址
dwNumber = 选择 (寻找文本 (szServerName, “http://”, , 假) = -1, 1, 寻找文本 (szServerName, “http://”, , 假) + 7)
szServerName = 取文本中间 (szServerName, dwNumber, 选择 (寻找文本 (szServerName, “/”, dwNumber, 假) = -1, 取文本长度 (szServerName), 寻找文本 (szServerName, “/”, dwNumber, 假) - dwNumber)) ' 这段代码是过滤掉前http://和后/





.如果真 (取反 (不过滤端口))
  dwNumber = 寻找文本 (szServerName, “:”, , 假)
  .如果真 (dwNumber ≠ -1)
    szServerName = 取文本左边 (szServerName, dwNumber - 1)
  .如果真结束

.如果真结束
返回 (到小写 (szServerName))

.子程序 编码转换, 字节集
.参数 待转换数据, 字节集
.参数 转换前编码, 文本型
.参数 转换后编码, 文本型, , utf-8;unicode;GBK 等
.参数 开始位置, 整数型, 可空, 位置从0开始。
.局部变量 文本, 文本型
.局部变量 字节集, 字节集
.局部变量 Adodb, 对象
.局部变量 变体型, 变体型

初始化对象开始 (0)
Adodb.创建 (“Adodb.Stream”, )
Adodb.写属性 (“Type”, 1)
Adodb.方法 (“Open”, )
变体型.置类型 (7)
变体型.创建数组 (1, 取字节集长度 (待转换数据))
变体型.赋值 (待转换数据, )
Adodb.方法 (“Write”, 变体型)
Adodb.写属性 (“Position”, 0)
Adodb.写属性 (“Type”, 2)
Adodb.写属性 (“Charset”, 转换前编码)
文本 = Adodb.文本方法 (“ReadText”, )
Adodb.方法 (“Close”, )
Adodb.方法 (“Open”, )
Adodb.写属性 (“Charset”, 转换后编码)
Adodb.方法 (“WriteText”, 文本)
Adodb.写属性 (“Position”, 0)
Adodb.写属性 (“Type”, 1)
.如果真 (是否为空 (开始位置) = 假)
  Adodb.写属性 (“Position”, 开始位置)
.如果真结束
字节集 = Adodb.通用方法 (“Read”, ).取字节集 ()
Adodb.清除 ()
初始化对象结束 ()
返回 (字节集)

.版本 2

.DLL命令 初始化对象开始, , "ole32.dll", "CoInitialize"
  .参数 pvReserved, 整数型

.DLL命令 初始化对象结束, , "ole32.dll", "CoUninitialize"

.DLL命令 InternetSetCookie, , "wininet.dll", "InternetSetCookieA"
  .参数 域名, 文本型, 传址
  .参数 名称, 文本型, 传址
  .参数 内容, 文本型, 传址

.DLL命令 InternetGetCookie, , "wininet.dll", "InternetGetCookieA"
  .参数 域名, 文本型, 传址
  .参数 名称, 文本型, 传址
  .参数 内容, 文本型, 传址
  .参数 尺寸, 整数型, 传址

.DLL命令 HttpQueryInfo, , "wininet.dll", "HttpQueryInfoA"
  .参数 Internet请求句柄, 整数型
  .参数 待查信息, 整数型, , 22返回所有信息;43SET_COOKIE;+2147483648返回文本
  .参数 返回容器, 文本型, 传址
  .参数 返回容器长度, 整数型, 传址
  .参数 lpdwIndex, 整数型

.DLL命令 HttpAddRequestHeaders, , "wininet.dll", "HttpAddRequestHeadersA"
  .参数 Internet请求句柄, 整数型
  .参数 lpszHeaders, 文本型, 传址
  .参数 dwHeadersLength, 整数型
  .参数 dwModifiers, 整数型

.DLL命令 InternetCloseHandle, 逻辑型, "wininet.dll", "InternetCloseHandle", , 访问网页
  .参数 hInternet, 整数型

.DLL命令 HttpOpenRequest, 整数型, "WinINet.dll", "HttpOpenRequestA"
  .参数 hConnect, 整数型
  .参数 lpszVerb, 文本型
  .参数 lpszObjectName, 文本型
  .参数 lpszVersion, 文本型
  .参数 lpszReferer, 文本型
  .参数 lplpszAcceptTypes, 文本型
  .参数 dwFlags, 整数型
  .参数 dwContext, 整数型

.DLL命令 InternetReadFile, 逻辑型, "WinINet.dll"
  .参数 hFile, 整数型
  .参数 lpBuffer, 字节集, 传址
  .参数 dwNumberOfBytesToRead, 整数型
  .参数 lpdwNumberOfBytesRead, 整数型, 传址

.DLL命令 HttpSendRequest, 逻辑型, "wininet.dll", "HttpSendRequestA"
  .参数 HTTP请求句柄, 整数型
  .参数 sHeaders, 文本型, 传址
  .参数 lHeadersLength, 整数型
  .参数 sOptional, 文本型, 传址
  .参数 lOptionalLength, 整数型

.DLL命令 InternetConnect, 整数型, "wininet.dll", "InternetConnectA"
  .参数 Internet句柄, 整数型
  .参数 域名, 文本型, 传址
  .参数 服务器端口, 整数型, , 80HTTP;21FTP;
  .参数 用户名, 文本型, 传址, 空
  .参数 用户口令, 文本型, 传址, 空
  .参数 服务类型, 整数型, , 1FTP;3HTTP
  .参数 dwFlags, 整数型, , 0http;134217728被动FTP模式
  .参数 dwContext, 整数型, , 0

.DLL命令 InternetOpen, 整数型, "wininet.dll", "InternetOpenA"
  .参数 句柄名称, 文本型, 传址
  .参数 连接类型, 整数型, , 1直接连接;3代理连接
  .参数 代理, 文本型, 传址
  .参数 代理掩码, 文本型, 传址
  .参数 dwFlags, 整数型, , 0

.DLL命令 _执行, 整数型, , "ShellExecuteA"
  .参数 hwnd, 整数型, , 指定一个窗口的句柄,有些时候,Windows程序有必要在创建自己的主窗口前显示一个消息框。
  .参数 lpOperation, 文本型, , 指定字串“Open”来打开lpFlie文档;或指定“Print”来打印它。也可设为vbNullString,表示默认为“Open”
  .参数 lpFile, 文本型, , 想用关联的程序打印或打开的一个程序名或文件名
  .参数 lpParameters, 文本型, , 如lpFile是一个可执行文件,则这个字串包含了传递给执行程序的参数。如lpFile引用的是一个文档文件,或者不需要使用参数,则设为vbNullString
  .参数 lpDirectory, 文本型, , 想使用的默认路径完整路径
  .参数 nShowCmd, 整数型, , 定义了如何显示启动程序的常数值。参考ShowWindow函数的nCmdShow参数

您可能感兴趣的文章:
阅读全文