泓泰

网络通信过程的解读

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

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

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

大家好,在【zài】一【yī】讲【jiǎng】中【zhōng】,我【wǒ】讲解了网络通信的一些概念及【jí】网络通信的实现【xiàn】的【de】步骤,在这一【yī】讲我们【men】来解读网络通信的具【jù】体【tǐ】过程,了解【jiě】一下网络通信的请求和响应是如何实现的。

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

为了更【gèng】好的给大【dà】家讲解网络通信的【de】过程,我在360浏览【lǎn】器【qì】中要直接进行网址的搜索【suǒ】

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

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)首行的HTTP方法,就是请求【qiú】的【de】方法。常用的【de】就GET和【hé】POST。

GET是索取数据【jù】的【de】请求【qiú】,要求【qiú】服务器返回URL指定的文档内容【róng】,或【huò】返回URL指【zhǐ】定的数据处理【lǐ】过程的结果所指向的文档,是最常见【jiàn】的。

POST是向服务器提交数【shù】据的【de】请求,要求服务器接收【shōu】并利用【yòng】随附的消息主体【tǐ】的数【shù】据,来执行某【mǒu】个【gè】程【chéng】序或【huò】获取文档,通常【cháng】用于浏览器向服务器发送表单数据,例【lì】如提交注【zhù】册信息,或者进行数据【jù】查【chá】询等。

所以,如果【guǒ】采用GET方式【shì】,一般消息主体为空【kōng】,采用POST方式的话【huà】,一般就有【yǒu】相应【yīng】的消息主【zhǔ】体。

请注【zhù】意,并不意味【wèi】着采用GET方式就【jiù】不能携【xié】带数据【jù】了,URL是【shì】可以携带我们需要传递给【gěi】服务器的参数【shù】的。可【kě】有多个参数,用"&"符号隔开,每个参数的名和值用"="符号【hào】隔开。

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

2)Host字段:该字段指【zhǐ】定请求资源的【de】Intenet主机和端口号,即URL的域名部分【fèn】,HTTP/1.1请【qǐng】求【qiú】必须包含该字【zì】段。

3)User-Agent字段:该【gāi】字段【duàn】的【de】内容包含发出请【qǐng】求【qiú】的用户信息(浏览器和系【xì】统等消息)。

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

5)If-Modified-Since字段:所请求的【de】页【yè】面在客户【hù】端的缓存中的【de】最近更新时间;

6)If-None-Match字段:后【hòu】面储【chǔ】存【cún】的是客户端读取的缓存中页面【miàn】的缓【huǎn】存检验值


特别提示,发包【bāo】的【de】整个过【guò】程,例如消息主【zhǔ】体,都【dōu】不【bú】支持英【yīng】文和【hé】数字以外的字符,如果要写入【rù】中【zhōng】文或特殊字符,就需要URLENCODE的【de】函数进行转码了。

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

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

当我们发送请【qǐng】求【qiú】后【hòu】,服务器处理完我【wǒ】们【men】的请求,就会向我们的浏览器,发送响应【yīng】消息了。我们看看【kàn】上面请求【qiú】的响【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) 状【zhuàng】态行【háng】 = HTTP协议【yì】 [空格] 状【zhuàng】态码 [空格] 状态解释 [回【huí】车换行],状态码常见的就是,200成功、400错误请求(一般我【wǒ】们是发送的请求有问题)、500服【fú】务【wù】器错【cuò】误【wù】。上【shàng】面的【de】值【zhí】是304,我在下面有讲解【jiě】。

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

3) Expires:指明应该在什【shí】么时【shí】候认为【wéi】文档已经过期【qī】,从而不再缓存它。

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

5) Set-Cookie: 服务器【qì】向客户【hù】端发送【sòng】的cookie。

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

3 Cookie、Session与Cache(缓存)

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

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

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

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


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


本节知识点回向:


网络【luò】通【tōng】信【xìn】的过【guò】程是怎么样的【de】?每个阶段有【yǒu】哪些数【shù】据【jù】的传【chuán】输?什么是Cookie?什么是Session?什么是Cache?作用是什么?

积木编程的思路内涵:

在我的系列书籍中一直在强调"搭【dā】积木"的编【biān】程思路【lù】,这也是学习【xí】利用VBA的主【zhǔ】要方法,特别是【shì】职场人【rén】员,更【gèng】是要【yào】采用这种方案。其主要的内【nèi】涵:

1 代码不要自己全【quán】部的录【lù】入。你要【yào】做【zuò】的是【shì】把积木放在合适【shì】的【de】位置然后去修正代码,一定要拷贝,从你【nǐ】的积木库中去拷贝,然【rán】后修正代码,把时【shí】间利用到高效的【de】思考上。

2 建立自【zì】己的【de】"积木库"。平时在学习过程中,把自己认为有用的【de】代【dài】码放在一起,多积累,在用【yòng】到的时【shí】候,可以随时拿【ná】来。你【nǐ】的积木库资料越多【duō】,你【nǐ】做程序的【de】思路【lù】就会【huì】越广。

VBA的应用界定

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

我记得20年前自己初学VBA时,那时的【de】资料甚少,只能看源码自己琢磨,真【zhēn】的很难。20年过【guò】去了【le】,为了不让学习VBA的【de】朋友重复我之前【qián】的经历,我根【gēn】据自【zì】己多年【nián】VBA实际利用【yòng】经验,推出了六部【bù】VBA专门【mén】教【jiāo】程【chéng】:

第一套【tào】:VBA代码【mǎ】解决【jué】方案 是VBA中各个知识点【diǎn】的讲解【jiě】,教程共147讲,覆盖绝【jué】大多数的VBA知识点,初学必【bì】备;

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

第三套:VBA数组与字典【diǎn】解【jiě】决方案 数组和字典是VBA的精华【huá】,字典是VBA代码水【shuǐ】平提高的有效【xiào】手【shǒu】段,值得深入的学习,是初级【jí】及【jí】中级人【rén】员代码【mǎ】精进的手段。

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

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

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

大家可以【yǐ】根据以上资料1→3→2→6→5或【huò】者是4→3→2→6→5的顺序逐渐【jiàn】深入的逐【zhú】渐学习。教【jiāo】程提供讲解的【de】同时提供了大【dà】量的【de】积木,如需要可【kě】以WeChat: NZ9668


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

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

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

每一分收获都是【shì】成长的记录,怎【zěn】无凭,正是这种【zhǒng】执着【zhe】,成就了朝霞【xiá】的灿烂。最后将一阙词送给致【zhì】力于VBA学习的【de】朋【péng】友,让【ràng】大家【jiā】感受一下学习过程的枯燥与执着:


浮云掠过,暗语无声,

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

望星,疏移北斗,

奈将往事雁同行。

阡陌人,昏灯明暗,

忍顾长亭。

多少VBA人,

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

怎无凭!


回向学习利用VBA的历历往事,不胜感慨,谨以这些【xiē】文字给大家,分享我多年工作【zuò】实际经【jīng】验【yàn】的【de】成果,随喜这【zhè】些有用的东西,给确【què】实需【xū】要利【lì】用【yòng】VBA的同【tóng】路人。


分享成果,随喜正能量

标签: #wow钓鱼100200