VBA处理网基础一_第1页
VBA处理网基础一_第2页
VBA处理网基础一_第3页
VBA处理网基础一_第4页
VBA处理网基础一_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VBA的 WEB应用系列教程 HTTP通讯基础篇VBA的 WEB应用教程,预计按以下几方面进行发布,敬请期待:( 1)HTTP通讯基础篇: 主讲 INTERNET通讯基础知识、 网络数据包构成、 HTTP协议简介、收发包工具使用技巧和初步在 VBA中进行收发包。( 2)网页元素分析基础篇:主讲 XHTML元素基础知识、 HTMLD OM基础知 识、网页元素分析工具使用技巧和初步使用 VBA进行网页操控。( 3)QUERYTABL篇E:主要介绍 EXCEL自带导入网页数据对象 QUERYTABLE 的主要属性和方法,如何运用它导入网页数据。(4)抓包控件篇:主讲 XMLHTT、P WINHTT、

2、P inet 控件和 WINSOC控K 件 基础知识、运用技巧和程序模板。(5)页面控制和数据提取篇:主讲 WEBBROWS控E件R 的基础知识和页面 控制技巧,讲解如何从网页页面上提取所需的表单数据,赠送程序模板。( 6)文本处理和补遗篇:主讲文本处理技巧、文本内码转换、 URL内码 转换、补充 ADO Stream对象在 WEB方面的应用、 XML数据交互、 WEB服 务和服务器推送机制等知识补遗。(7)数据提取和数据防盗的博弈:主要介绍几种常见的网络数据防盗的 情形,并探讨如何破解思路。( 8)JAVASCRIPT篇:高阶教程,主要简介 JAVASCRIPT基础知识,以及 MSScrip

3、tControl 对象主要属性和方法, VBA如何解析 json 序列。 以下开始第一篇的正文:、网络通信基础知识串讲网络通俗的说,是能上网的计算机的集合。计算机彼此不同,它们 如何进行通讯呢,通过什么规则来通信呢。通过 TCP/IP 等标准协议,它 允许我们的电脑,通过互联网直接和另一台电脑进行通讯。请注意, TCP/IP 一般只是底层协议 (传输层),可以简单理解为它只是提供计算机 设备之间的底层通讯接口,其他例如软件方面的对接,还需要高层协议, 后面我们会讲到。有了通讯的规则,那计算机硬件方面是怎么互相识别呢。他们是通 过数字地址, 即我们通常说的 IP ,就像百度的 IP 就是,我们可

4、以在浏览 器地址栏键入也可以对百度进行访问。这一串数字实在不好记啊,所以 就有了 域名, 。用域名通讯的时候,域名要先经过互联网上的域名服务 器( DNS)进行转换,转成 IP 地址,再进行访问。网络上的两台计算机通讯,很多情况,一台是我们这些 客户机 ,另 外一台是提供信息的 服务器 。客户机需要浏览网页资讯的时候,是通过 我们机子上安装的 浏览器 ,例如 IE 、FIREFOX等,向服务器发送请求, 服务器响应浏览器的请求,将相关的信息回传给我们的浏览器,浏览器 进行识别和翻译,展现出来大量的文本或图片等,来供我们查看。请注意,一般而言,通讯是 静态 的。服务器在等待浏览器的请求之 前,是

5、不会主动做任何事情的。现在页面很多动态实时的效果,其实还 是我们浏览器,不停的向服务器发送请求,服务器返回消息再更新页面 的结果,例如 AJAX技术;或者是首次请求后,通讯并没有断开,服务器 源源不断的往浏览器发送更新数据,这就是传说中的长连接技术。服务器能识别我们的请求,我们的浏览器,也能翻译或解释那些服务器返回的数据或文档,那彼此之间的通讯格式,还需要一个协议去规 范的。这就是我们常说的 超文本传输协议 HTTP。HTTP协议就是用于 客户端和服务器之间的文档或数据的交互的。请注意,这里的文档指的 不仅是文本,还可能是图片、视频或音频,或者是指向到其他文档的嵌 入式链接,因此叫超文本。一般

6、情况,当我们的浏览器,通过域名,访问了某个服务器,一般 会进到服务器的门户主页面中。当我们点击门户页面的某个超链接或者 点击某个提交按钮后, 要求服务器进一步返回我们需要的某个资源文档, 或者执行我们提交给它的某些命令时(例如成绩查询) 。其实,我们刚才 点击的超链接或按钮, 就蕴含着我们要获取的文档或者执行程序的路径, 这个路径统称 URL统一资源定位符。HTTP通讯中,这个路径的格式一般为: / 文档或程序的全路径 ?参数 。 端口就是服务器某个特定进程来处理客户端发来的消息,默认为80,可以先不用去理解这个名词。文档或程序路径是相对路径。服务器也是一 台计算机,上面除了存放资源文件,还存

7、放着维护服务器的软件,因此 资源文档可能并不存放在其根目录上。例如,可能我们的资源文档根目 录是服务器上 /admin/web 这个目录,那服务器根目录下 /admin/web/news/weather.html 这个文件。 最后的?参数,是可选的, 用 于传递浏览器向服务器发送的请求参数,可有多个参数,用“ &”符号隔 开,每个参数的名和值用“ =”符号隔开,例如: =苹果,就是浏览器向 百度服务器发送查询参数,查询关键字是苹果的数据,并请求按 utf-8 的内码进行返回。 请注意,URL里面有时候是不支持英文和数字以外的字 符的,这时候就需要 URLENCOD的E函数去转换了,后话,以后会

8、讲。综上所述,一句话而言,服务器接收浏览器发来的 HTTP请求,并翻 译识别请求中的消息并进行权限校检,进而识别请求中的 URL并翻译成 服务器的一个文档名称(找到它并按请求的内容进行返回)或程序名称 (传递参数按请求的规定执行它并将结果返回) 。二、HTTP协议简析基本上,大部分的 web通讯,都是使用 http 协议。我们用下面的图, 复习下通讯的流程(客户端发起请求,服务器回送响应) :(1)首先客户机与服务器建立连接。(2)建立连接后,客户机通过 HTTP协议发送一个 请求 给服务器。(3)服务器接到请求后,给予相应的 响应 信息。(4)客户端接收服务器所返回的信息通过浏览器显示在用户

9、的显示 屏上,然后客户机与服务器断开连接。从流程上,可以看出,它由 请求和响应 构成。通讯的每次请求或相 应中,都包含着两个部分: 头部和主体 。头部 包含了构建通讯所需的信 息/ 命令;主体包含了通信传递的数据, 头部和主体之间间隔一个 VBCRL。F 我们还是通过, FIDDLER这个抓包软件来进行讲解,请上进行下载。举例说明如下,请在浏览器地址栏键入: sInfo.do?method=index , 出现企业登记信息查询的页面,选择按注册号查询,并将输入至下方的 文本框中。如图所示:这时,我们先打开 FIDDLER,然后再按下网页的搜索按钮。这样,FIDDLER就可以捕捉到,执行搜索的

10、HTTP请求,还能截取到查询结果的响应消息。我们分阶段进行解析。(一)请求阶段如图操作,选择第一条记录, 有时候就是发送查询命令的 HTTP请求。 选择左边的 INSPECTOR的S RAW标签,就可以看见 HTTP请求的内容。 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateDNT: 1Connection: keep-aliveCooki

11、e: JSESSIONIDlz=00002DNpApMXAw1wHVO0vSgVGuf:16f9u5edl;JSESSIONID=0000g4T4RXnmmvxkZ2Vi0rZy3fM:132eapo0dContent-Type: application/x-www-form-urlencodedContent-Length: 37实际情况中,有可能会看到一系列的发包记录,那实际的获取数据 的发包请求又是哪一条呢?一般不用一个个记录去看,我们可以选取结 果页面的一个标识语句(例如“搜索结果”啊,“注册成功”啊,这样 的标示语句) ,在 FIDDLER界面按住 CTRL+F会, 出现查找功能的界

12、面, 然 后键入我们要查找的标识,如图,就可以搜索出到底是哪条记录。从上面的 RAW标签,可以看出, HTTP请求的通用格式:? HTTP方法 URL 或 URL的路径部分 HTTP 协议版本? 头部字段? 回车换行? 消息主体下面按照该格式的每个条目进行解释:1、首行的 HTTP方法,就是请求的方法,总共有 5 种,但是常用的 就 GET和 POST, GET是索取数据的请求,要求服务器返回 URL指定的文 档内容,或返回 URL指定的数据处理过程的结果所指向的文档,是最常 见的。 POST是向服务器提交数据的请求,要求服务器接收并利用随附的 消息主体的数据,来执行某个程序或获取文档,通常用

13、于浏览器向服务 器发送表单数据,例如提交注册信息,或者进行数据查询等。所以,如 果采用 GET方式,一般消息主体为空,采用 POST方式的话,一般就有相 应的消息主体。请注意,并不意味着采用 GET方式就不能携带数据了,上一节我们 说了, URL是可以携带我们需要传递给服务器的参数的。例如 =苹果。可 有多个参数,用“ &”符号隔开,每个参数的名和值用“ =”符号隔开。那既然 GET方式也可以携带参数,那两者区别又是什么呢?一是安 全性,GET方式参数就在 URL,提交的是密码等私密资料就不合适用 GET; 二是,GET方式提交的数据最多只能有 1024字节,而 POST则没有此限制。 三是,

14、GET一般不能改变服务器的数据, 而 POST可以改变服务器的数据, 例如注册了个用户,服务器就多了数据条目。2、头部字段 ,头部字段主要描述的是我们的请求的内容,绝大部分 是可选的。格式为“ 字段名称 : 字段值”,以下列举几个常用又比较重要 的头部字段吧,其他请自行参阅 HTTP协议:host 字段:该字段指定请求资源的 Intenet 主机和端口号,即 URL的域名部分, HTTP/1.1 请求必须包含该字段。Referer 字段: Referer 字段值,就是我们发起 HTTP请求时的 那个页面 URL,是用来控制盗链的一种方式。User-Agent 字段:该字段的内容包含发出请求的用

15、户信息(浏 览器和系统等消息) 。有时候也会作为放盗的一种方式,更多用来服务器 判定依据不同用户系统情况,返回不同的兼容文档。Cache-Control 字段:用来指定请求遵循的缓存机制。包括 no-cache 、no-store 、max-age、max-stale 、min-fresh 、only-if-cached 等。Cookie 字段:这是比较重要的请求头信息之一;这个我们后面 详细说,先跳过。If-Modified-Since 字段:所请求的页面在客户端的缓存中的 最近更新时间;Pragma字段:指定“ no-cache ”值表示服务器必须返回一个刷 新后的文档,即使它是代理服务器

16、而且已经有了页面的本地拷贝;Content-Type 字段 : 在使用 POST方式的时候,这个字段非常 关键,用来标识后附的消息主体的类型。作为抓包爱好者,理解不了就 算了,写程序的时候,直接抄袭抓包软件看到的,例如上面例子的是 “ application/x-www-form-urlencoded ”。一般 POST方式,这句较少省 略,如果不附上,就得不到正确的数据结果。Content-Length 字段:表示 HTTP请求的消息主体的文本长度If-None-Match 字段:后面储存的是客户端读取的缓存中页面 的缓存检验值,后面缓存中再讲;( 3)当采用 POST方式,就会携带消息主体

17、了,这时,头部和主体 之间的回车换行的标示符号,就必不可少了。主体就是请求通信传递的 数据,上例中的主体内容“”就是传递我们查询所需的注册号和查询方式(按注册号查询)等参数,和 GET方式一样,可有多个参数,用“ &” 符号隔开,每个参数的名和值用“ =”符号隔开。请注意,发包的整个过程,例如消息主体,都不支持英文和数字以 外的字符,如果要写入中文或特殊字符,就需要URLENCOD的E函数进行转码了。后话,心急的读者自行百度, VBA URLENCO。DE(二)响应阶段 当我们发送请求后,服务器处理完我们的请求,就会向我们的浏览 器,发送响应消息了。 FIDDLER中,响应消息就在请求消息的下

18、面,一样 看 RAW标签,如图:HTTP/1.0 200 OKDate: Sun, 22 Jul 2012 06:46:31 GMTServer: IBM_HTTP_ServerContent-Length: 8292Content-Type: text/html; charset=UTF-8Content-Language: zh-CNAge: 312X-Cache: MISS from WebAuditConnection: keep-aliveHTTP响应消息的格式如下所示:? 状态行? 头部字段车换行? 实体内容1、 状态行 = HTTP 协议 空格 状态码 空格 状态解释 回车 换行

19、状态码常见的就是, 200成功、400 错误请求(一般我们是发送的请 求有问题)、500服务器错误,其余不说明了,自行搜索百度哈。2、 头部字段 响应阶段的头部字段主要描述的是服务器响应的情况。最常见的头 部字段如下:Content-Type :表示后面的文档属于什么类型;Expires :指明应该在什么时候认为文档已经过期,从而不再 缓存它。Last-Modified :文档在服务器上最后更新时间。同缓存一起 保存这个值,当再次访问该页面,在请求的头部字段的 If-Modified-Since 中再次携带这个时间值发送至服务器, 如果服务器此 时的文档更新时间晚于该时间, 返回新页面数据,

20、否则返回一个 304(Not Modified )状态,并加载缓存数据进行显示;Set-Cookie: 服务器向客户端发送的 cookie , cookie 后面简 析。ETag :一段文本,一般也是用于缓存是否更新的判断的校检 值,当首次访问页面时候,获取这个值,同缓存一起保存,当再次访问 时候,请求阶段的 If-None-Match 字段就会再次携带这段校检值发送至 服务器,服务器判断 ETag校检值是否变化,变化则返回新的页面数据, 无变化则返回 304,读取缓存数据显示。3、和请求阶段一样,头部和实体之间用回车换行符间隔,后面的 实体,就是服务器返回的网页的源代码了。视服务器文档情况,

21、大部分 情况是 html 格式的,这个东东,我们第二节课再讲咯。(三)初识 cookie 和 session 由于第一节讲了,网络通讯是静态的, http 协议是无状态的。它对于我们之前的所有通讯都没有记忆能力。那出现的问题是,如果后续处 理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据 量增大。另一方面,就难以验证用户的权限和登录问题。于是,两种用 于解决机制就产生了,就是 Cookie 和 Session 。Cookie 是通过客户端记录通讯情况,其是由服务器发给客户端的特 殊信息,以文本文件的方式存放在我们的电脑上 (WINDOW系S统哈, 浏览 器会将这些信息存放在 系统

22、盘 :Documents and Settings 用户 名 Cookies 目录中),然后我们的浏览器每次向服务器发送请求的时候 就会带上这些特殊的信息。例如,当我们登录网站时,服务器会发送一 段 cookie 给我们,这就是我们在上面的响应阶段所说的 Set-Cookie 头 部字段的功能,后续的通讯,在请求阶段,就会使用 cookie 请求字段, 发送这段文本,服务器收到了这段文本,就知道我们已经登录了。另外一个解决方案是 Session ,它是通过服务器来记录通讯情况。 Session 指的是服务器端为客户端所开辟的存储空间, 在其中保存的信息 就是用于保持状态。当我们的浏览器首次访问

23、或者登录服务器时,服务 器就创建一个 session ,服务器会为该 Session 生成唯一的 Session id , 这个 session id 将从 URL或者从 cookie 返回客户端,以后的 HTTP请求, 从 cookie 或者 URL附上 Session id ,服务器接受到请求之后就会依据 Session id 找到相应的 Session ,这样,用户的状态也就记忆了。(四)初识缓存( cache)缓存 (cache) 保存在客户端上的。当我们首次访问某个页面时,浏览 器会自动保存这个页面的部分内容,例如 html 页面,图片等,当下一次 再次访问时,缓存直接使用之前保存的

24、数据响应访问请求,而不是向服 务器再次发送请求。这样大大的节约了访问的时间。一般缓存判断的常见流程如下:客户端首次访问服务器后,服务器 会返回该页面的 Last-Modified 或 ETag字段值, 客户端将该页面数据保 存在 cache 中,并记录这两个属性。当客户端再次访问这个页面,请求 阶段的消息,会在 If-Modified-Since (对应 Last-Modified )或 If-None-Match (对应 ETag)两个字段中携带之前在 cache 中保存的 Last-Modified 或 ETag的属性值。服务器通过判断这个两个属性,判断 页面是否发生变化,如无变化,客户端

25、不需要重新下载,返回 304 响应。其他的判断方式还有使用 Expires 的头部字段,该字段给了一个文 档的有效期,过了这个有效期,就必须重新下载。三、如何模拟 HTTP请求(一)在 FIDDLER中模拟 在第二节的第一点,我们抓取了,用注册号,查询企业注册信息的 HTTP请求,我们怎么模拟它呢?可以在 FIDDLER中进行模拟,首先复制 一下,第二节第一点中,我们在 INSPECTOR选S项卡中 ROW标签得到的 HTTP 请求,然后选择 composer 选项卡 RAW标签或者 PARSED标签,填入我们 所要发送的 HTTP请求,之前也所过了,很多字段其实是可选的,经过删 减测试,最终

26、必须的字段如下图:然后按右上的 EXECUT按E 钮,就可以发送请求了,然后继续在左边界面和 INSPECTOR选S 项卡中观看是否成功。(二) VBA中模拟当在 FIDDLER中模拟成功后,我们就可以把相关的 HTTP请求,在 VBA 中,套用在 XMLHTTP对象上。后面的课程会详细讲这些对象的属性和方 法,本次仅是演示,代码如下:Option ExplicitSub test()With CreateObject(Microsoft.XMLHTTP).setRequestHeader content-type, application/x-www-form-urlencodedDebug.Print .responsetextEnd WithEnd Sub上述代码,仅仅模拟了 HTTP请求的过程,在立即窗口输出的是网页 的源代码,后面还需加工处理,以后我们的课再说,其他有一定基础的 同学,可以运用正则等对象或文本处理函数,进行相关处理,获取我们 所需的东东。还有转码的东西,不要急,后面也会说。还有,我们的浏 览器,是怎么把这一大堆源代码,翻译成直观的东西的,下节课就会说 了。不要小看上面这些通讯原理,没有他们,是肯定没法学好后面的内 容的,特别

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论