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,就像百度的IP就是119.75.217.56,我们可以在浏览器地址栏键入119.75.217.56也可以对百度进行访问。这一串数字实在不好记啊,所以就有了域名,。用域名通讯的时候,域名要先经过互联网上的域名服务器(DNS)进行转换,转成IP地址,再进行访问。网络上的两台计算机通讯,很多情况,一台是我们这些客户机,另外一台是提供信息的服务器。客户机需要浏览网页资讯的时候,是通过我们机子上安装的浏览器,例如IE、FIREFOX等,向服务器发送请求,服务器响应浏览器的请求,将相关的信息回传给我们的浏览器,浏览器进行识别和翻译,展现出来大量的文本或图片等,来供我们查看。请注意,一般而言,通讯是静态的。服务器在等待浏览器的请求之前,是不会主动做任何事情的。现在页面很多动态实时的效果,其实还是我们浏览器,不停的向服务器发送请求,服务器返回消息再更新页面的结果,例如AJAX技术;或者是首次请求后,通讯并没有断开,服务器源源不断的往浏览器发送更新数据,这就是传说中的长连接技术。服务器能识别我们的请求,我们的浏览器,也能翻译或解释那些服务器返回的数据或文档,那彼此之间的通讯格式,还需要一个协议去规范的。这就是我们常说的超文本传输协议——HTTP。HTTP协议就是用于客户端和服务器之间的文档或数据的交互的。请注意,这里的文档指的不仅是文本,还可能是图片、视频或音频,或者是指向到其他文档的嵌入式链接,因此叫超文本。一般情况,当我们的浏览器,通过域名,访问了某个服务器,一般会进到服务器的门户主页面中。当我们点击门户页面的某个超链接或者点击某个提交按钮后,要求服务器进一步返回我们需要的某个资源文档,或者执行我们提交给它的某些命令时(例如成绩查询)。其实,我们刚才点击的超链接或按钮,就蕴含着我们要获取的文档或者执行程序的路径,这个路径统称URL——统一资源定位符。HTTP通讯中,这个路径的格式一般为:HTTP://域名:端口/文档或程序的全路径?参数。端口就是服务器某个特定进程来处理客户端发来的消息,默认为80,可以先不用去理解这个名词。文档或程序路径是相对路径。服务器也是一台计算机,上面除了存放资源文件,还存放着维护服务器的软件,因此资源文档可能并不存放在其根目录上。例如,可能我们的资源文档根目录是服务器上/admin/web这个目录,那http://域名/news/weather.html其实访问的就是服务器根目录下/admin/web/news/weather.html这个文件。最后的?参数,是可选的,用于传递浏览器向服务器发送的请求参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开,例如:=utf-8&wd=苹果,就是浏览器向百度服务器发送查询参数,查询关键字是苹果的数据,并请求按utf-8的内码进行返回。请注意,URL里面有时候是不支持英文和数字以外的字符的,这时候就需要URLENCODE的函数去转换了,后话,以后会讲。综上所述,一句话而言,服务器接收浏览器发来的HTTP请求,并翻译识别请求中的消息并进行权限校检,进而识别请求中的URL并翻译成服务器的一个文档名称(找到它并按请求的内容进行返回)或程序名称(传递参数按请求的规定执行它并将结果返回)。二、HTTP协议简析基本上,大部分的web通讯,都是使用http协议。我们用下面的图,复习下通讯的流程(客户端发起请求,服务器回送响应):(1)首先客户机与服务器建立连接。(2)建立连接后,客户机通过HTTP协议发送一个请求给服务器。(3)服务器接到请求后,给予相应的响应信息。(4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。从流程上,可以看出,它由请求和响应构成。通讯的每次请求或相应中,都包含着两个部分:头部和主体。头部包含了构建通讯所需的信息/命令;主体包含了通信传递的数据,头部和主体之间间隔一个VBCRLF。我们还是通过,FIDDLER这个抓包软件来进行讲解,请上进行下载。举例说明如下,请在浏览器地址栏键入:=index,出现企业登记信息查询的页面,选择按注册号查询,并将310115000909792输入至下方的文本框中。如图所示:这时,我们先打开FIDDLER,然后再按下网页的搜索按钮。这样,FIDDLER就可以捕捉到,执行搜索的HTTP请求,还能截取到查询结果的响应消息。我们分阶段进行解析。(一)请求阶段如图操作,选择第一条记录,有时候就是发送查询命令的HTTP请求。选择左边的INSPECTORS的RAW标签,就可以看见HTTP请求的内容。POST=doSearchHTTP/1.1Host:(WindowsNT5.1;rv:14.0)Gecko/20100101Firefox/14.0.1Accept: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-aliveReferer:=indexCookie:JSESSIONIDlz=00002DNpApMXAw1wHVO0vSgVGuf:16f9u5edl;JSESSIONID=0000g4T4RXnmmvxkZ2Vi0rZy3fM:132eapo0dContent-Type:application/x-=2&keyWords=310115000909792实际情况中,有可能会看到一系列的发包记录,那实际的获取数据的发包请求又是哪一条呢?一般不用一个个记录去看,我们可以选取结果页面的一个标识语句(例如“搜索结果”啊,“注册成功”啊,这样的标示语句),在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-”。一般POST方式,这句较少省略,如果不附上,就得不到正确的数据结果。2.9Content-Length字段:表示HTTP请求的消息主体的文本长度2.10If-None-Match字段:后面储存的是客户端读取的缓存中页面的缓存检验值,

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功