C说话编写Http处事器中Request的理会,让一些从零开始
【51CTO技能沙龙】10月27日,让我们配合试探AI场景化应用实现之道
建造流程
调查收到的http数据 假如你能完成一个简朴的基于TCP/IP的socket server 措施,那么恭喜你,本文你可以好好读一读。HTTP正式基于TCP/IP的应用层协议,以是只要我们的措施能读懂HTTP数据,并做出切合HTTP协议的相应,那么就能完成HTTP的通讯。 假如你有机遇,可以知识行使telnet毗连我们的处事器,你将的获得得是一些没故意义的字符。假如是赏识器,会传送什么呢?我们试着在赏识器地点栏输入我们的处事器地点: 127.0.0.1:9734 后会见,发明赏识器说“127.0.0.1 发送的相应无效。”, 那是说我们返回给赏识器的数据赏识器读不懂,由于当代的赏识器默认用http协议哀求会见我们的处事器,而我们的返回的数据只是"helloworld"字符串,并不切合http协议的返回名目。固然云云,但赏识器却是很有诚意的给我们的处事器发尺度的http哀求,不信我们看下我们的处事器收到的信息: 先调查一会儿,看起来第一行是http哀求的范例,第二行开始是一些":"号支解的键值对。简直云云,第一行汇报我们是用的GET哀求,哀求的url是"/",用的是1.1的HTTP版本。第二行开始是HTTP的哀求头部。除了GET哀求外,另一种常用的哀求是POST。用赏识器发POST哀求稍贫困,我们就借用curl器材来发送个HTTP POST哀求给处事器看下数据又会是怎们样的:curl -d "message=nice to meet you" 127.0.0.1:9734/hello 处事器收到的信息: 可以看到头部信息之后多了一空行和之后的POST的body数据信息。还要留意的是Content-Length头,代表POST的body数据的巨细。 理会 request 的 method url version 先来理会最简朴的第一行: "POST /hell HTTP/1.1", 只必要用空格split出三个字符串就好了。 1.request.h 2.request.c 3.编写测试用例 在test目次下执行:` gcc ../request.h ../request.c requestTest.c && ./a.out`,可以看到我们理会的要领正确。 理会 header header的理会看起来较量伟大,每一行很轻易看出是用":"支解的key-value对,以是我们可以用HashMap来表达。怎样判定header数据的竣事呢,通过前面的调查,可以发明假如是POST会有一个空行和body离隔,是GET的话只能搜查客户端的数据是否发完,发完就代表header也末了了。在正式理会header之前,我们先结构根基数据的数据布局,以利便往后行使。
由于代码较量多,这里不久不把两种布局体得实当代码贴出来,假如足下必要可以私信我"代码"获取。 理会header代码,有了哈希布局体后,理会header就利便多了,只要按行按照":" 拆分成 key和value就行了 要害代码: 理会body 理会body很简朴,假如最后一行不是空格不是空行,声名是有body数据的,空行后头的就是body数据了. header内里有个要害的key, ‘Content-Length’ 代表了body有多长,我们可以操作这个字段来判定body的末了。 大功告成 最后打印我们的成就 打印理会内容 执行 gcc request.h request.c main.c tools/utils.c tools/utils.h && ./a.out 然后新开一个终端执行 curl -d "message=nice to meet you" 127.0.0.1:9734/hello-everyone 看到输出功效: 总的来说难度系数照旧有一些得呦,再会。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |