VBA 处理网页基础一.docx

上传人:b****4 文档编号:5195587 上传时间:2022-12-13 格式:DOCX 页数:11 大小:204.64KB
下载 相关 举报
VBA 处理网页基础一.docx_第1页
第1页 / 共11页
VBA 处理网页基础一.docx_第2页
第2页 / 共11页
VBA 处理网页基础一.docx_第3页
第3页 / 共11页
VBA 处理网页基础一.docx_第4页
第4页 / 共11页
VBA 处理网页基础一.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

VBA 处理网页基础一.docx

《VBA 处理网页基础一.docx》由会员分享,可在线阅读,更多相关《VBA 处理网页基础一.docx(11页珍藏版)》请在冰豆网上搜索。

VBA 处理网页基础一.docx

VBA处理网页基础一

VBA的WEB应用系列教程

——HTTP通讯基础篇

VBA的WEB应用教程,预计按以下几方面进行发布,敬请期待:

(1)HTTP通讯基础篇:

主讲INTERNET通讯基础知识、网络数据包构成、HTTP协议简介、收发包工具使用技巧和初步在VBA中进行收发包。

(2)网页元素分析基础篇:

主讲XHTML元素基础知识、HTMLDOM基础知识、网页元素分析工具使用技巧和初步使用VBA进行网页操控。

(3)QUERYTABLE篇:

主要介绍EXCEL自带导入网页数据对象QUERYTABLE的主要属性和方法,如何运用它导入网页数据。

(4)抓包控件篇:

主讲XMLHTTP、WINHTTP、inet控件和WINSOCK控件基础知识、运用技巧和程序模板。

(5)页面控制和数据提取篇:

主讲WEBBROWSER控件的基础知识和页面控制技巧,讲解如何从网页页面上提取所需的表单数据,赠送程序模板。

(6)文本处理和补遗篇:

主讲文本处理技巧、文本内码转换、URL内码转换、补充ADOStream对象在WEB方面的应用、XML数据交互、WEB服务和服务器推送机制等知识补遗。

(7)数据提取和数据防盗的博弈:

主要介绍几种常见的网络数据防盗的情形,并探讨如何破解思路。

(8)JAVASCRIPT篇:

高阶教程,主要简介JAVASCRIPT基础知识,以及MSScriptControl对象主要属性和方法,VBA如何解析json序列。

以下开始第一篇的正文:

一、网络通信基础知识串讲

网络通俗的说,是能上网的计算机的集合。

计算机彼此不同,它们如何进行通讯呢,通过什么规则来通信呢。

通过TCP/IP等标准协议,它允许我们的电脑,通过互联网直接和另一台电脑进行通讯。

请注意,TCP/IP一般只是底层协议(传输层),可以简单理解为它只是提供计算机设备之间的底层通讯接口,其他例如软件方面的对接,还需要高层协议,后面我们会讲到。

有了通讯的规则,那计算机硬件方面是怎么互相识别呢。

他们是通过数字地址,即我们通常说的IP,就像XX的IP就是119.75.217.56,我们可以在浏览器地址栏键入119.75.217.56也可以对XX进行访问。

这一串数字实在不好记啊,所以就有了域名,。

用域名通讯的时候,域名要先经过互联网上的域名服务器(DNS)进行转换,转成IP地址,再进行访问。

网络上的两台计算机通讯,很多情况,一台是我们这些客户机,另外一台是提供信息的服务器。

客户机需要浏览网页资讯的时候,是通过我们机子上安装的浏览器,例如IE、FIREFOX等,向服务器发送请求,服务器响应浏览器的请求,将相关的信息回传给我们的浏览器,浏览器进行识别和翻译,展现出来大量的文本或图片等,来供我们查看。

请注意,一般而言,通讯是静态的。

服务器在等待浏览器的请求之前,是不会主动做任何事情的。

现在页面很多动态实时的效果,其实还是我们浏览器,不停的向服务器发送请求,服务器返回消息再更新页面的结果,例如AJAX技术;或者是首次请求后,通讯并没有断开,服务器源源不断的往浏览器发送更新数据,这就是传说中的长连接技术。

服务器能识别我们的请求,我们的浏览器,也能翻译或解释那些服务器返回的数据或文档,那彼此之间的通讯格式,还需要一个协议去规范的。

这就是我们常说的超文本传输协议——HTTP。

HTTP协议就是用于客户端和服务器之间的文档或数据的交互的。

请注意,这里的文档指的不仅是文本,还可能是图片、视频或音频,或者是指向到其他文档的嵌入式链接,因此叫超文本。

一般情况,当我们的浏览器,通过域名,访问了某个服务器,一般会进到服务器的门户主页面中。

当我们点击门户页面的某个超链接或者点击某个提交按钮后,要求服务器进一步返回我们需要的某个资源文档,或者执行我们提交给它的某些命令时(例如成绩查询)。

其实,我们刚才点击的超链接或按钮,就蕴含着我们要获取的文档或者执行程序的路径,这个路径统称URL——统一资源定位符。

HTTP通讯中,这个路径的格式一般为:

HTTP:

//域名:

端口/文档或程序的全路径?

参数。

端口就是服务器某个特定进程来处理客户端发来的消息,默认为80,可以先不用去理解这个名词。

文档或程序路径是相对路径。

服务器也是一台计算机,上面除了存放资源文件,还存放着维护服务器的软件,因此资源文档可能并不存放在其根目录上。

例如,可能我们的资源文档根目录是服务器上/admin/web这个目录,那http:

//域名/news/weather.html其实访问的就是服务器根目录下/admin/web/news/weather.html这个文件。

最后的?

参数,是可选的,用于传递浏览器向服务器发送的请求参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开,例如:

综上所述,一句话而言,服务器接收浏览器发来的HTTP请求,并翻译识别请求中的消息并进行权限校检,进而识别请求中的URL并翻译成服务器的一个文档名称(找到它并按请求的内容进行返回)或程序名称(传递参数按请求的规定执行它并将结果返回)。

二、HTTP协议简析

基本上,大部分的web通讯,都是使用http协议。

我们用下面的图,复习下通讯的流程(客户端发起请求,服务器回送响应):

(1)首先客户机与服务器建立连接。

(2)建立连接后,客户机通过HTTP协议发送一个请求给服务器。

(3)服务器接到请求后,给予相应的响应信息。

(4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

从流程上,可以看出,它由请求和响应构成。

通讯的每次请求或相应中,都包含着两个部分:

头部和主体。

头部包含了构建通讯所需的信息/命令;主体包含了通信传递的数据,头部和主体之间间隔一个VBCRLF。

我们还是通过,FIDDLER这个抓包软件来进行讲解,请上

举例说明如下,请在浏览器地址栏键入:

 

这时,我们先打开FIDDLER,然后再按下网页的搜索按钮。

这样,FIDDLER就可以捕捉到,执行搜索的HTTP请求,还能截取到查询结果的响应消息。

我们分阶段进行解析。

(一)请求阶段

如图操作,选择第一条记录,有时候就是发送查询命令的HTTP请求。

选择左边的INSPECTORS的RAW标签,就可以看见HTTP请求的内容。

 

POSTHTTP/1.1

Host:

User-Agent:

Mozilla/5.0(WindowsNT5.1;rv:

14.0)Gecko/20100101Firefox/14.0.1

Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language:

zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding:

gzip,deflate

DNT:

1

Connection:

keep-alive

Referer:

Cookie:

JSESSIONIDlz=00002DNpApMXAw1wHVO0vSgVGuf:

16f9u5edl;JSESSIONID=0000g4T4RXnmmvxkZ2Vi0rZy3fM:

132eapo0d

Content-Type:

application/x-www-form-urlencoded

Content-Length:

37

searchType=2&keyWords=310115*********

实际情况中,有可能会看到一系列的发包记录,那实际的获取数据的发包请求又是哪一条呢?

一般不用一个个记录去看,我们可以选取结果页面的一个标识语句(例如“搜索结果”啊,“注册成功”啊,这样的标示语句),在FIDDLER界面按住CTRL+F,会出现查找功能的界面,然后键入我们要查找的标识,如图,就可以搜索出到底是哪条记录。

从上面的RAW标签,可以看出,HTTP请求的通用格式:

ØHTTP方法URL或URL的路径部分HTTP协议版本

Ø头部字段

Ø回车换行

Ø消息主体

下面按照该格式的每个条目进行解释:

1、首行的HTTP方法,就是请求的方法,总共有5种,但是常用的就GET和POST,GET是索取数据的请求,要求服务器返回URL指定的文档内容,或返回URL指定的数据处理过程的结果所指向的文档,是最常见的。

POST是向服务器提交数据的请求,要求服务器接收并利用随附的消息主体的数据,来执行某个程序或获取文档,通常用于浏览器向服务器发送表单数据,例如提交注册信息,或者进行数据查询等。

所以,如果采用GET方式,一般消息主体为空,采用POST方式的话,一般就有相应的消息主体。

请注意,并不意味着采用GET方式就不能携带数据了,上一节我们说了,URL是可以携带我们需要传递给服务器的参数的。

例如

那既然GET方式也可以携带参数,那两者区别又是什么呢?

一是安全性,GET方式参数就在URL,提交的是密码等私密资料就不合适用GET;二是,GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

三是,GET一般不能改变服务器的数据,而POST可以改变服务器的数据,例如注册了个用户,服务器就多了数据条目。

2、头部字段,头部字段主要描述的是我们的请求的内容,绝大部分是可选的。

格式为“字段名称:

字段值”,以下列举几个常用又比较重要的头部字段吧,其他请自行参阅HTTP协议:

2.1host字段:

该字段指定请求资源的Intenet主机和端口号,即URL的域名部分,HTTP/1.1请求必须包含该字段。

2.2Referer字段:

Referer字段值,就是我们发起HTTP请求时的那个页面URL,是用来控制盗链的一种方式。

2.3User-Agent字段:

该字段的内容包含发出请求的用户信息(浏览器和系统等消息)。

有时候也会作为放盗的一种方式,更多用来服务器判定依据不同用户系统情况,返回不同的兼容文档。

2.4Cache-Control字段:

用来指定请求遵循的缓存机制。

包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached等。

2.5Cookie字段:

这是比较重要的请求头信息之一;这个我们后面详细说,先跳过。

2.6If-Modified-Since字段:

所请求的页面在客户端的缓存中的最近更新时间;

2.7Pragma字段:

指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝;

2.8Content-Type字段:

在使用POST方式的时候,这个字段非常关键,用来标识后附的消息主体的类型。

作为抓包爱好者,理解不了就算了,写程序的时候,直接抄袭抓包软件看到的,例如上面例子的是“application/x-www-form-urlencoded”。

一般POST方式,这句较少省略,如果不附上,就得不到正确的数据结果。

2.9Content-Length字段:

表示HTTP请求的消息主体的文本长度

2.10If-None-Match字段:

后面储存的是客户端读取的缓存中页面的缓存检验值,后面缓存中再讲;

(3)当采用POST方式,就会携带消息主体了,这时,头部和主体之间的回车换行的标示符号,就必不可少了。

主体就是请求通信传递的数据,上例中的主体内容“searchType=2&keyWords=310115*********”就是传递我们查询所需的注册号和查询方式(按注册号查询)等参数,和GET方式一样,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。

请注意,发包的整个过程,例如消息主体,都不支持英文和数字以外的字符,如果要写入中文或特殊字符,就需要URLENCODE的函数进行转码了。

后话,心急的读者自行XX,VBAURLENCODE。

(二)响应阶段

当我们发送请求后,服务器处理完我们的请求,就会向我们的浏览器,发送响应消息了。

FIDDLER中,响应消息就在请求消息的下面,一样看RAW标签,如图:

 

HTTP/1.0200OK

Date:

Sun,22Jul201206:

46:

31GMT

Server:

IBM_HTTP_Server

Content-Length:

8292

Content-Type:

text/html;charset=UTF-8

Content-Language:

zh-CN

Age:

312

X-Cache:

MISSfromWebAudit

Connection:

keep-alive

DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http:

//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

………

HTTP响应消息的格式如下所示:

Ø状态行

Ø头部字段

Ø回车换行

Ø实体内容

1、状态行=HTTP协议[空格]状态码[空格]状态解释[回车换行]

状态码常见的就是,200成功、400错误请求(一般我们是发送的请求有问题)、500服务器错误,其余不说明了,自行搜索XX哈。

2、头部字段

响应阶段的头部字段主要描述的是服务器响应的情况。

最常见的头部字段如下:

2.1Content-Type:

表示后面的文档属于什么类型;

2.2Expires:

指明应该在什么时候认为文档已经过期,从而不再缓存它。

2.3Last-Modified:

文档在服务器上最后更新时间。

同缓存一起保存这个值,当再次访问该页面,在请求的头部字段的If-Modified-Since中再次携带这个时间值发送至服务器,如果服务器此时的文档更新时间晚于该时间,返回新页面数据,否则返回一个304(NotModified)状态,并加载缓存数据进行显示;

2.4Set-Cookie:

服务器向客户端发送的cookie,cookie后面简析。

2.5ETag:

一段文本,一般也是用于缓存是否更新的判断的校检值,当首次访问页面时候,获取这个值,同缓存一起保存,当再次访问时候,请求阶段的If-None-Match字段就会再次携带这段校检值发送至服务器,服务器判断ETag校检值是否变化,变化则返回新的页面数据,无变化则返回304,读取缓存数据显示。

3、和请求阶段一样,头部和实体之间用回车换行符间隔,后面的实体,就是服务器返回的网页的源代码了。

视服务器文档情况,大部分情况是html格式的,这个东东,我们第二节课再讲咯。

(三)初识cookie和session

由于第一节讲了,网络通讯是静态的,http协议是无状态的。

它对于我们之前的所有通讯都没有记忆能力。

那出现的问题是,如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

另一方面,就难以验证用户的权限和登录问题。

于是,两种用于解决机制就产生了,就是Cookie和Session。

Cookie是通过客户端记录通讯情况,其是由服务器发给客户端的特殊信息,以文本文件的方式存放在我们的电脑上(WINDOWS系统哈,浏览器会将这些信息存放在[系统盘]:

\DocumentsandSettings\[用户名]\Cookies目录中),然后我们的浏览器每次向服务器发送请求的时候就会带上这些特殊的信息。

例如,当我们登录网站时,服务器会发送一段cookie给我们,这就是我们在上面的响应阶段所说的Set-Cookie头部字段的功能,后续的通讯,在请求阶段,就会使用cookie请求字段,发送这段文本,服务器收到了这段文本,就知道我们已经登录了。

另外一个解决方案是Session,它是通过服务器来记录通讯情况。

Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。

当我们的浏览器首次访问或者登录服务器时,服务器就创建一个session,服务器会为该Session生成唯一的Sessionid,这个sessionid将从URL或者从cookie返回客户端,以后的HTTP请求,从cookie或者URL附上Sessionid,服务器接受到请求之后就会依据Sessionid找到相应的Session,这样,用户的状态也就记忆了。

(四)初识缓存(cache)

缓存(cache)保存在客户端上的。

当我们首次访问某个页面时,浏览器会自动保存这个页面的部分内容,例如html页面,图片等,当下一次再次访问时,缓存直接使用之前保存的数据响应访问请求,而不是向服务器再次发送请求。

这样大大的节约了访问的时间。

一般缓存判断的常见流程如下:

客户端首次访问服务器后,服务器会返回该页面的Last-Modified或ETag字段值,客户端将该页面数据保存在cache中,并记录这两个属性。

当客户端再次访问这个页面,请求阶段的消息,会在If-Modified-Since(对应Last-Modified)或If-None-Match(对应ETag)两个字段中携带之前在cache中保存的Last-Modified或ETag的属性值。

服务器通过判断这个两个属性,判断页面是否发生变化,如无变化,客户端不需要重新下载,返回304响应。

其他的判断方式还有使用Expires的头部字段,该字段给了一个文档的有效期,过了这个有效期,就必须重新下载。

三、如何模拟HTTP请求

(一)在FIDDLER中模拟

在第二节的第一点,我们抓取了,用注册号,查询企业注册信息的HTTP请求,我们怎么模拟它呢?

可以在FIDDLER中进行模拟,首先复制一下,第二节第一点中,我们在INSPECTORS选项卡中ROW标签得到的HTTP请求,然后选择composer选项卡RAW标签或者PARSED标签,填入我们所要发送的HTTP请求,之前也所过了,很多字段其实是可选的,经过删减测试,最终必须的字段如下图:

 

 

然后按右上的EXECUTE按钮,就可以发送请求了,然后继续在左边界面和INSPECTORS选项卡中观看是否成功。

(二)VBA中模拟

当在FIDDLER中模拟成功后,我们就可以把相关的HTTP请求,在VBA中,套用在XMLHTTP对象上。

后面的课程会详细讲这些对象的属性和方法,本次仅是演示,代码如下:

OptionExplicit

Subtest()

WithCreateObject("Microsoft.XMLHTTP")

.Open"POST","False

.setRequestHeader"content-type","application/x-www-form-urlencoded"

.SEND"searchType=2&keyWords=310115000909792"

Debug.Print.responsetext

EndWith

EndSub

上述代码,仅仅模拟了HTTP请求的过程,在立即窗口输出的是网页的源代码,后面还需加工处理,以后我们的课再说,其他有一定基础的同学,可以运用正则等对象或文本处理函数,进行相关处理,获取我们所需的东东。

还有转码的东西,不要急,后面也会说。

还有,我们的浏览器,是怎么把这一大堆源代码,翻译成直观的东西的,下节课就会说了。

不要小看上面这些通讯原理,没有他们,是肯定没法学好后面的内容的,特别是,网页数据防盗的破解的。

最后,小技巧,POST和GET不一定是绝对的,嘿嘿,有时候,POST的消息主体的内容,加个“?

”号带到URL后边当参数,也是可以获取正确的码源的,呵呵。

这个读者自己去领悟吧,哈哈。

上面那个案例是不行噢,只能POST,不能用searchType=2&keyWords=310115*********去get,我遇到很多情况是可以的,自己找其他页面测试,哈。

附加阅读材料(网上搜的,用于扩展理解):

http代理

1.http代理服务器

代理服务器就是代理网络用户去取得网络信息。

形象的说:

它是网络信息的中转站。

代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,请求信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。

而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。

2http代理服务器的主要功能

1)突破自身IP访问限制,访问国外站点。

2)访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务;

3)突破中国电信的IP封锁:

中国电信用户有很多网站是被限制访问的,这种限制是人为的,不同Serve对地址的封锁是不同的。

所以不能访问时可以换一个国外的代理服务器试试;

4)提高访问速度:

通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度;

5)隐藏真实IP:

上网者也可以通过这种方法隐藏自己的IP,免受攻击。

3http代理图示

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1