泓泰

网络通信过程的解读

admin
网络通信过程的解读-第1张-游戏相关-泓泰

大家【jiā】好,我们今日【rì】讲解"网络通【tōng】信过程的解读",这【zhè】节内容【róng】是"VBA信息获取与处理"教程中第七个专题"VBA与HTTP网络通【tōng】讯"的第二节【jiē】。由于涉及到文章的审核相关【guān】问题【tí】(设计到一些网址【zhǐ】的【de】话审核通过十分困【kùn】难),关于网抓的内容在【zài】平台上发【fā】表的不全,平台发表【biǎo】的代码有【yǒu】些运行不了【le】,这是因为缺少某些自定义函【hán】数的过程【chéng】,在其他的章节【jiē】中。如【rú】果有需要学习【xí】网抓【zhuā】的【de】朋友可以联络我分享这套教程。其【qí】中的程序文【wén】件【jiàn】是非常值得【dé】拥【yōng】有的代【dài】码源码。

第二节 网络通信过程的解读

大家好,在一讲【jiǎng】中,我讲解了网络通信的一些概念及网络通信的实现【xiàn】的步骤,在【zài】这一讲【jiǎng】我们来【lái】解读网络【luò】通信【xìn】的具体过【guò】程【chéng】,了解【jiě】一下网络通【tōng】信的请求和响【xiǎng】应是【shì】如何实现的。

1 网络通信中客户端请求阶段

为了更【gèng】好【hǎo】的给大家【jiā】讲解网络通信【xìn】的过程【chéng】,我在360浏览【lǎn】器中要直【zhí】接进行网址的搜索

为了更好的给大家讲解【jiě】,我利用了【le】一【yī】个抓包的【de】软件【jiàn】得到了我们客户端对服【fú】务器的【de】请求如下【xià】:

GET HTTP/1.1

Host:

Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9

Cookie: __guid=208989332.4442495301675265000.1591451028570.9978; monitor_count=1; home4399=yes;UM_distinctid=17289df92b6561-0048d5baa4a47b-4e4c0d20-100200-17289df92b71d;CNZZDATA30039538=cnzz_eid%3D1989079887-1591447571-null%26ntime%3D1591447571; Hm_lvt_334aca66d28b3b338a76075366b2b9e8=1591451030

If-None-Match: W/"5edaf3e5-29b9a"

If-Modified-Since: Sat, 06 Jun 2020 01:39:49 GMT

上述截图:


内容的讲解:


1)首行【háng】的HTTP方法【fǎ】,就是请求的方法。常用【yòng】的【de】就GET和POST。

GET是索【suǒ】取数据的请求,要【yào】求服务器返回URL指定的【de】文档内容,或返【fǎn】回【huí】URL指定的数据【jù】处理过程的结果所指向的【de】文档【dàng】,是最常见的【de】。

POST是向服务【wù】器提交数据【jù】的请求,要求【qiú】服务器接【jiē】收【shōu】并【bìng】利用【yòng】随附的消息主体的数据,来执行某个程序【xù】或获【huò】取文档,通常【cháng】用于浏览器向服务器发送表单数据,例如提【tí】交注册信息【xī】,或者进【jìn】行数据【jù】查询等【děng】。

所【suǒ】以,如【rú】果采用GET方式【shì】,一【yī】般【bān】消息主体为空,采用POST方【fāng】式的话,一般就有【yǒu】相应的消息主【zhǔ】体。

请注意,并不意味着采【cǎi】用GET方式就不【bú】能携带数据了,URL是【shì】可【kě】以携带我们【men】需要传【chuán】递【dì】给服务器的参数【shù】的。可有【yǒu】多个参数,用"&"符号【hào】隔开,每个参数的名和值【zhí】用"="符【fú】号隔开。

那既【jì】然GET方式也可以携带【dài】参【cān】数,那两者区【qū】别【bié】又是什【shí】么【me】呢?一【yī】是安【ān】全性【xìng】,GET方【fāng】式参数【shù】就在URL,提交【jiāo】的是密【mì】码等私密资【zī】料就不【bú】合适用GET;二【èr】是,GET方式提交的数【shù】据最多只能【néng】有1024字节,而POST则没有【yǒu】此限制。三是,GET一般不能改变服务器的数据,而POST可以改变服务器的数据,例如注册了个用户,服【fú】务器就多了数据条目。

2)Host字段:该字【zì】段指定请【qǐng】求资源的Intenet主机和【hé】端【duān】口号,即URL的域名部【bù】分,HTTP/1.1请求必须包含【hán】该【gāi】字段。

3)User-Agent字段:该【gāi】字【zì】段的内容包含发出【chū】请求的用【yòng】户信息(浏【liú】览【lǎn】器和系统等消息【xī】)。

4)Cookie字段:这是比较重要的请求头信息之一

5)If-Modified-Since字段:所【suǒ】请【qǐng】求【qiú】的页面在客户端的缓存中的最近【jìn】更新时间;

6)If-None-Match字段:后面【miàn】储存【cún】的是客户端读取的缓【huǎn】存中【zhōng】页面的【de】缓存检验值


特别提示【shì】,发包的整【zhěng】个过程,例如消息【xī】主体,都不支持英文和数字以外的字符【fú】,如【rú】果要写入中【zhōng】文或特殊字【zì】符,就需要【yào】URLENCODE的函【hán】数进行转码了。

urlencode是一个函数【shù】,可将字符串【chuàn】以URL编码,用于编码处理,URL编码【mǎ】(URL encoding),也称作百分号编码(Percent-encoding), 是特定上下【xià】文的统一资源【yuán】定位符 (URL)的【de】编码机制【zhì】。将【jiāng】需要转码的字符转为【wéi】16进【jìn】制,然后【hòu】从【cóng】右到左【zuǒ】,取【qǔ】4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。

2 网络通信的服务器响应阶段

当我们发【fā】送请求后,服务器处理完我们的【de】请求【qiú】,就会向我们的浏【liú】览器,发送响【xiǎng】应消息了。我们看看上面请【qǐng】求的响【xiǎng】应:


HTTP/1.1 304 Not Modified

Date: Sat, 06 Jun 2020 13:44:06 GMT

Content-Type: text/html

Connection: keep-alive

Expires: Sat, 06 Jun 2020 10:20:10 GMT

Last-Modified: Sat, 06 Jun 2020 01:39:49 GMT

ETag: "5edaf3e5-29b9a"

Cache-Control: max-age=1800

Age: 14028

X-Via: 1.1 CSP-129514:10 (Cdn Cache Server V2.0)

X-Ws-Request-Id: 5edb9da6_CSP-129514_16864-31796



下面我们来解读一下上面的数据:

1) 状态行 = HTTP协议 [空格] 状态码 [空格] 状态解释 [回车换【huàn】行],状【zhuàng】态码常【cháng】见的就是,200成【chéng】功、400错误请求(一【yī】般我们是【shì】发送的请求有【yǒu】问【wèn】题)、500服务器错误。上面的值是304,我在下面有讲【jiǎng】解。

2)Content-Type:表示后面的文档属于什么类型;

3) Expires:指【zhǐ】明【míng】应该在什么时候认为文档【dàng】已经过期,从而【ér】不再缓存它【tā】。

4) Last-Modified:文档【dàng】在服务器上最后【hòu】更新【xīn】时【shí】间。同缓存一起保存【cún】这个值,当再次访问该【gāi】页面,在请求的头部字段的If-Modified-Since中再次携带这个【gè】时【shí】间值发送【sòng】至【zhì】服【fú】务【wù】器,如果服务器此时的文档更新时间【jiān】晚于该时间【jiān】,返回新【xīn】页面数【shù】据,否则返回一个304(Not Modified)状【zhuàng】态,并加载缓【huǎn】存数据进行显【xiǎn】示;

5) Set-Cookie: 服务器向客户端【duān】发送的cookie。

6) ETag:一段文本,一般也是用于缓【huǎn】存【cún】是否更新的【de】判断的【de】校检【jiǎn】值,当首次访问页面时候【hòu】,获取这个值,同缓存一【yī】起保存【cún】,当再次访问时【shí】候,请求阶段的If-None-Match字段就会再次携带这段校检【jiǎn】值发送至服务器,服【fú】务器【qì】判【pàn】断ETag校检值是否变化,变化则返回新【xīn】的页面数据,无【wú】变化则返【fǎn】回304,读取【qǔ】缓存数据显【xiǎn】示。

3 Cookie、Session与Cache(缓存)

网络通讯是静【jìng】态的,http协【xié】议【yì】是【shì】无状态【tài】的。它对于我们【men】之前的所有通讯【xùn】都没有【yǒu】记忆能力。那出现的问题【tí】是,如果后续处【chù】理需要前面的【de】信息,则它必须【xū】重传,这样【yàng】可能【néng】导致每次连接传送的数【shù】据量【liàng】增大。另一方面,就难以【yǐ】验证【zhèng】用【yòng】户的权限和登录问【wèn】题。于是【shì】,两种用于解决机制就产【chǎn】生了,就【jiù】是Cookie和Session。还有就是利用Cache可以减小重复数据的下【xià】载。

1)Cookie 是通过客【kè】户端记录通讯情况,其是由服务【wù】器【qì】发给客户端的特殊信息,以【yǐ】文【wén】本【běn】文件【jiàn】的【de】方【fāng】式存放在我们的电脑上,然后【hòu】我们的【de】浏览器每次向服务器发送请求的【de】时【shí】候就会带上这些特【tè】殊的信息【xī】。例如,当我【wǒ】们登录网【wǎng】站时【shí】,服务器会【huì】发送一【yī】段cookie给我们,这就是【shì】我们在上面的响应阶段所说的Set-Cookie头部字段的功能,后续的通讯,在请求【qiú】阶【jiē】段,就会使用【yòng】cookie请【qǐng】求字段【duàn】,发送【sòng】这【zhè】段文本,服务【wù】器收到了这段文本【běn】,就知道我们已经登录了。

2)Session 它是通过服务器来记录通讯情况。Session指的是服务器端为【wéi】客【kè】户端所开辟的存储空间【jiān】,在其中保存【cún】的信息【xī】就【jiù】是用于保持状态。当我们的浏览器【qì】首【shǒu】次访问或者登录服【fú】务【wù】器时,服务器就创建一个session,服务器【qì】会为【wéi】该【gāi】Session生成唯一【yī】的Session id,这【zhè】个session id将【jiāng】从URL或者从cookie返回客户端,以后的HTTP请【qǐng】求,从【cóng】cookie或者URL附【fù】上Session id,服务器【qì】接【jiē】受到请【qǐng】求之后就【jiù】会依据Session id找到相【xiàng】应的Session,这样【yàng】,用户的状态也就记【jì】忆了。

3) Cache缓存 保存在客户【hù】端上的。当我们首次访问某个页面时,浏览器会自动保存这个页【yè】面的部分内容,例如html页面,图片等,当下一【yī】次再次访问时,缓【huǎn】存直接使用【yòng】之【zhī】前保存的【de】数据响应访问请【qǐng】求,而【ér】不是向服务【wù】器【qì】再次发送请求。这样【yàng】大大的节【jiē】约【yuē】了访【fǎng】问【wèn】的时间。客【kè】户端首次访问服务器后【hòu】,服务器会返回该【gāi】页面的Last-Modified或ETag字段【duàn】值【zhí】,客户【hù】端将该【gāi】页面【miàn】数据【jù】保存在cache中,并记录【lù】这两个【gè】属性。当客户端再次访问这个页面,请求阶段的【de】消息,会在If-Modified-Since(对应Last-Modified)或【huò】If-None-Match(对应ETag)两个字【zì】段中携带之前在cache中保存的Last-Modified或ETag的属性值【zhí】。服务器通【tōng】过【guò】判断这个【gè】两个属性,判断【duàn】页【yè】面【miàn】是否发生变化,如无变化,客户【hù】端【duān】不需要重新下载,返回【huí】304响应【yīng】。


以上就是整个网络通信过程的基本过程,大家可以慢慢理解。


本节知识点回向:


网络【luò】通信的过程【chéng】是怎【zěn】么样的?每个阶段有【yǒu】哪【nǎ】些数【shù】据的传输?什【shí】么是【shì】Cookie?什么是Session?什么是Cache?作用【yòng】是什么?

积木编程的思路内涵:

在我的系列书籍中【zhōng】一直【zhí】在强调【diào】"搭积【jī】木"的编程思路,这也是学习利用VBA的主要【yào】方【fāng】法,特别是【shì】职场人员,更是【shì】要【yào】采用这种方案。其主要的【de】内涵:

1 代码【mǎ】不要自己全【quán】部的录入。你要做的是把积【jī】木放在合适的【de】位置然【rán】后去修正代码,一定【dìng】要拷【kǎo】贝,从你的积木库中【zhōng】去拷【kǎo】贝,然后【hòu】修正代【dài】码,把时间利用【yòng】到高效的思考上【shàng】。

2 建立【lì】自己的【de】"积【jī】木库"。平【píng】时在学习过程【chéng】中,把自己【jǐ】认为有用的代码放在一起,多积累,在用到的【de】时候【hòu】,可以随【suí】时拿来。你的积木【mù】库资料越多,你做程序的【de】思路就会越广。

VBA的应用界定

VBA是【shì】利用【yòng】Office实现【xiàn】个人小型办公自动化【huà】的有【yǒu】效手【shǒu】段(工具)。这【zhè】是我【wǒ】对VBA的应用界【jiè】定。在取代OFFICE新的办公软【ruǎn】件【jiàn】没有到来【lái】之前,谁能在数据处理方面做到极【jí】致,谁就是王者。其中【zhōng】登峰至极的技能非VBA莫属!

我记得20年【nián】前【qián】自己【jǐ】初学【xué】VBA时,那时【shí】的资料【liào】甚【shèn】少,只能看源码自【zì】己琢磨,真【zhēn】的很难。20年【nián】过去了,为了不让学习VBA的朋【péng】友【yǒu】重复我之前的经历,我【wǒ】根据自己多年VBA实际【jì】利用经验,推出了六部VBA专门教程:

第【dì】一套:VBA代码解决方案 是VBA中【zhōng】各个知【zhī】识点的讲解,教程【chéng】共147讲,覆【fù】盖绝大多数的【de】VBA知识点【diǎn】,初学必备;

第【dì】二套:VBA数据【jù】库解决方案 数据库是数据处理的专业利器【qì】,教程中【zhōng】详【xiáng】细介绍【shào】了利用ADO连接ACCDB和EXCEL的方法和实例操【cāo】作,适【shì】合中级【jí】人员的学习。

第三套:VBA数组与字【zì】典解【jiě】决方案 数【shù】组和字典【diǎn】是VBA的精华,字典是VBA代码水平提高的有效手【shǒu】段,值得深入的学习【xí】,是初级及【jí】中【zhōng】级人【rén】员代码精进【jìn】的手段【duàn】。

第四【sì】套:VBA代码【mǎ】解【jiě】决【jué】方【fāng】案之视频 是专门面向初【chū】学者的视频讲解,可以快速入门,更快的掌【zhǎng】握这门技能。这套教程是【shì】第一【yī】套教程【chéng】的【de】视频【pín】讲解,听元【yuán】音更易接受。

第五套:VBA中类的解读和利用 这是一部【bù】高级【jí】教程,讲解【jiě】类【lèi】的【de】虚无与肉身的度化【huà】,类的利用虽然【rán】较少,但仔细的学习可以促【cù】进自己VBA理论的【de】提【tí】高。这套【tào】教程的领会主【zhǔ】要是读者的领悟了,领悟一【yī】种【zhǒng】佛学的【de】哲理。

第【dì】六套教程:《VBA信息获取【qǔ】与处理》,这是【shì】一部高【gāo】级教程,涉及范围更【gèng】广,实用性【xìng】更强,面向【xiàng】中【zhōng】高级人员。教程共二十个专题,包括:跨应用程序信【xìn】息获【huò】得、随机信息的利用、电子邮件的发送、VBA互【hù】联【lián】网【wǎng】数【shù】据抓取、VBA延时操作,剪切板应用、Split函数【shù】扩展、工【gōng】作【zuò】表信【xìn】息与【yǔ】其【qí】他应用交互,FSO对象的利用、工作表及【jí】文件【jiàn】夹信息的【de】获取、图形信息的获取以及【jí】定【dìng】制工作表信息函数等等内容【róng】。

大【dà】家可以根据【jù】以上资料1→3→2→6→5或者是【shì】4→3→2→6→5的顺序【xù】逐【zhú】渐深入的逐渐学习。教程提供讲解的同时提【tí】供了大【dà】量的积木,如需要【yào】可以【yǐ】WeChat: NZ9668


学习VBA是个过程,也需要经历一种枯燥的感觉

如太白诗云:众鸟【niǎo】高飞尽,孤云【yún】独【dú】去闲【xián】。相看两【liǎng】不厌,只【zhī】有敬亭【tíng】山【shān】。学习【xí】的过程也是【shì】修心【xīn】的过程,修一个平静的心。在【zài】代码【mǎ】的世界【jiè】中,心平静了,心情好了,身体【tǐ】自然而然就好【hǎo】。心静则正,内心里没有【yǒu】那么多邪知邪见,也就没有那么多妄想。利人就是利己。这【zhè】些【xiē】教【jiāo】程也【yě】是为帮助大【dà】家起航,助上我自己之力,我的上【shàng】述教程是我【wǒ】多的经验【yàn】的【de】传递,

"水善【shàn】利万【wàn】物而不争",绵【mián】绵密密【mì】,微则无声,巨则汹涌。学习亦如此,知道【dào】什么是自己所需要的【de】,不【bú】要蜷缩在一小块自认为天堂的世界里,待到暮年时再去做【zuò】自欺欺【qī】人的言论。要努力【lì】提高【gāo】自己,用一颗充满生机的心【xīn】灵,把【bǎ】握【wò】现在【zài】,这才是进【jìn】取。越是有意义的事情,困难会【huì】越多【duō】。愿力决【jué】定始【shǐ】终【zhōng】,智慧决【jué】定成败。不管遇到【dào】什【shí】么【me】,都是风景。看淡纷争,看轻得失。茶,满也好,少也好,不要计【jì】较;浓也好,淡也好,其中自有值得品的味道。去感悟真实【shí】的【de】时间,静下【xià】心【xīn】,多学习,积累福【fú】报。而【ér】不是天天混日子【zǐ】,也不是天天熬【áo】日子。在后疫情更加严峻的存量残【cán】杀世【shì】界中,为自己的生存【cún】进行知识的【de】储备,特别是新知【zhī】识的储备。学习时微【wēi】而无【wú】声,利用【yòng】时则【zé】巨【jù】则【zé】汹涌。

每一分收获都是成长的记【jì】录,怎无凭,正【zhèng】是这【zhè】种执着,成就了朝霞的【de】灿烂【làn】。最后将一【yī】阙词送给致力于VBA学习的朋友,让【ràng】大家感受一下学【xué】习【xí】过【guò】程【chéng】的枯燥与执着:


浮云掠过,暗语无声,

唯有清风,惊了梦中啼莺。

望星,疏移北斗,

奈将往事雁同行。

阡陌人,昏灯明暗,

忍顾长亭。

多少VBA人,

暗夜中,悄声寻梦,盼却天明。

怎无凭!


回【huí】向学习利用VBA的历历往事,不胜感慨【kǎi】,谨以【yǐ】这【zhè】些【xiē】文【wén】字【zì】给大家,分享我多年工作实际经验的【de】成果【guǒ】,随喜【xǐ】这【zhè】些【xiē】有用的东西,给确实需要利用VBA的同路人。


分享成果,随喜正能量

标签: #wow钓鱼100200