易语言进行网页操作方法

时间:2022-06-01 20:48:18

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

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

易语言进行网页操作方法

相关源码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
.版本 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参数