笨辦法學(xué) Python · 續(xù) 練習(xí) 52:`moreweb`

練習(xí) 52:moreweb

原文:Exercise 52: moreweb

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

自豪地采用谷歌翻譯

現(xiàn)在,你已經(jīng)使用 Python http.server庫(kù)創(chuàng)建了一個(gè) Web 服務(wù)器八毯。你已經(jīng)進(jìn)行到最后一個(gè)項(xiàng)目了捉兴。你將使用你至今為止所學(xué)到的所有東西尚粘,從無(wú)到有創(chuàng)建你自己的 Web 服務(wù)器庙睡。在練習(xí) 51 中蹈矮,你創(chuàng)建了大部分操作长已,它在http.server模塊“上面”畜眨。你沒(méi)有進(jìn)行任何網(wǎng)絡(luò)連接處理或 HTTP 協(xié)議解析昼牛。在最后的練習(xí)中,你將為你的lessweb服務(wù)器復(fù)制http.server(所做的一切)康聂,并實(shí)現(xiàn)所有必要的零件贰健。

挑戰(zhàn)練習(xí)

為了完成此練習(xí),你將需要閱讀 Python 3 asyncio模塊的文檔早抠。這個(gè)庫(kù)為你提供了工具霎烙,用于處理套接字請(qǐng)求,創(chuàng)建服務(wù)器蕊连,等待信號(hào)悬垃,以及大部分所需的其它東西。如果你想要一個(gè)額外的挑戰(zhàn)甘苍,那么你可以使用 Python 3 select模塊尝蠕,它提供了更低的級(jí)別的 API 來(lái)處理套接字。你應(yīng)該使用此文檔载庭,來(lái)創(chuàng)建一系列小型套接字服務(wù)器和客戶端看彼。

一旦你了解如何創(chuàng)建通過(guò) TCP/IP 套接字通話的服務(wù)器和客戶端,則需要轉(zhuǎn)而處理 HTTP 請(qǐng)求囚聚。該項(xiàng)目的這一部分將十分艱巨靖榕,因?yàn)?HTTP 標(biāo)準(zhǔn)喪心病狂,并且比其需要更復(fù)雜顽铸。我將從你可以設(shè)計(jì)的茁计,最簡(jiǎn)單的 HTTP 解析庫(kù)開(kāi)始,然后用越來(lái)越多的樣本進(jìn)行擴(kuò)展谓松。第一個(gè)起始位置是 RFC 7230星压,但準(zhǔn)備好體驗(yàn)一些人類(lèi)搞出來(lái)的,最糟糕的寫(xiě)作鬼譬。

研究 RFC 7230 的最佳方式是娜膘,首先提取“ABNF 匯總”附錄中列出的所有語(yǔ)法。一眼看去优质,這似乎是瘋狂的竣贪,因?yàn)檫@只是一個(gè)巨大的語(yǔ)法規(guī)范。你實(shí)際上在這本書(shū)的第五部分中盆赤,學(xué)到了如何閱讀它贾富,但是規(guī)模較小。你知道正則表達(dá)式牺六,掃描器和解析器的工作原理颤枪,以及如何閱讀這樣的語(yǔ)法。所有你需要做的是研究這種語(yǔ)法淑际,并一次實(shí)現(xiàn)一點(diǎn)畏纲。在實(shí)現(xiàn)它的時(shí)候扇住,我將完全忽略任何“塊”語(yǔ)法。

一旦你研究了這個(gè)語(yǔ)法盗胀,你應(yīng)該開(kāi)始為 HTTP 編寫(xiě)解析器艘蹋,使用你已經(jīng)創(chuàng)建的東西。使用你的數(shù)據(jù)結(jié)構(gòu)票灰,解析工具以及任何東西女阀,來(lái)為 HTTP 的小型子集創(chuàng)建解析器。覆蓋盡可能多的這種語(yǔ)法屑迂。為了幫助你浸策,有一組測(cè)試文件,其中具有有效的 HTTP 請(qǐng)求惹盼,請(qǐng)?jiān)L問(wèn) https://learncodethehardway.org/more-python-book/http_tests.zip庸汗。你可以下載這組測(cè)試用例,并通過(guò)你的解析器運(yùn)行它們手报,來(lái)確保它有用蚯舱。我從杰出的 And-HTTP 服務(wù)器中提取了許多這些測(cè)試用例,然后用更基本的例子來(lái)擴(kuò)展它們掩蛤。你的目標(biāo)是使它們盡可能多地通過(guò)枉昏。

最后,一旦你有了一種方式揍鸟,來(lái)編寫(xiě)一個(gè)良好的asyncio或者select套接字服務(wù)器凶掰,和一種解析 HTTP 的方式,你可以把它們放在一起蜈亩,制作你的第一個(gè)帶有功能的 Web 服務(wù)器。

破壞它

你一定要試圖破壞這個(gè) Web 服務(wù)器前翎,但你也應(yīng)該在這里嘗試不同的東西稚配。你已經(jīng)編寫(xiě)了一個(gè) HTTP 解析器,嘗試使用 RDP 風(fēng)格的解析器港华,以最合理的方式處理有效的 HTTP道川。你的解析器有很好的機(jī)會(huì),來(lái)阻止許多不好的 HTTP 請(qǐng)求立宜,所以找到一些以前的攻擊冒萄,并在你的 Web 服務(wù)器上嘗試它們。有幾個(gè)網(wǎng)站上有自動(dòng)化黑客工具橙数,所以獲取一個(gè)并將其對(duì)準(zhǔn)你的服務(wù)器尊流。但是要小心,并確保你只運(yùn)行著名的測(cè)試工具灯帮,并且只在你自己的服務(wù)器上崖技。

深入學(xué)習(xí)

如果你想完全了解 Web 服務(wù)器和技術(shù)逻住,請(qǐng)使用你的moreweb服務(wù)器來(lái)創(chuàng)建 Web 框架。我建議先創(chuàng)建一個(gè)網(wǎng)站迎献,然后從 Web 框架中提取出所需的模式瞎访。這種框架的目標(biāo)是,封裝你使用的模式吁恍,以便你可以簡(jiǎn)化后續(xù)的 Web 應(yīng)用程序扒秸。與lesswebmoreweb的練習(xí)一樣,你的目標(biāo)也應(yīng)該是研究冀瓦,實(shí)現(xiàn)和利用 Web 框架的常見(jiàn)攻擊伴奥。

如果你想深入 TCP/IP,我推薦 Jon C. Snader 的《Effective TCP/IP Programming》一書(shū)咕幻。這本書(shū)是用 C 語(yǔ)言寫(xiě)的渔伯,但它實(shí)際上是“笨辦法學(xué) TCP/IP》,涵蓋 44 個(gè)主題肄程,為你準(zhǔn)備了簡(jiǎn)單的代碼來(lái)了解基本的 TCP/IP 的工作原理锣吼。C 語(yǔ)言是 TCP/IP 的出生地,其他語(yǔ)言處理套接字連接的方式似乎很奇怪蓝厌,直到你知道 C 語(yǔ)言是如何實(shí)現(xiàn)它的玄叠。通過(guò)研究它,你將會(huì)深入了解套接字服務(wù)器的工作原理拓提。唯一的警告是這本書(shū)有點(diǎn)過(guò)時(shí)读恃,所以代碼應(yīng)該工作,但它可能不是最新的代碼代态。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寺惫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蹦疑,更是在濱河造成了極大的恐慌西雀,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歉摧,死亡現(xiàn)場(chǎng)離奇詭異艇肴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)叁温,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)再悼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人膝但,你說(shuō)我怎么就攤上這事冲九。” “怎么了锰镀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵娘侍,是天一觀的道長(zhǎng)咖刃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)憾筏,這世上最難降的妖魔是什么嚎杨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮氧腰,結(jié)果婚禮上枫浙,老公的妹妹穿的比我還像新娘。我一直安慰自己古拴,他們只是感情好箩帚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布粱挡。 她就那樣靜靜地躺著知纷,像睡著了一般苍糠。 火紅的嫁衣襯著肌膚如雪屑宠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天崩溪,我揣著相機(jī)與錄音苏潜,去河邊找鬼步责。 笑死挺尾,一個(gè)胖子當(dāng)著我的面吹牛鹅搪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遭铺,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼丽柿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了魂挂?” 一聲冷哼從身側(cè)響起甫题,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涂召,沒(méi)想到半個(gè)月后幔睬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芹扭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赦抖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舱卡。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖队萤,靈堂內(nèi)的尸體忽然破棺而出轮锥,到底是詐尸還是另有隱情,我是刑警寧澤要尔,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布舍杜,位于F島的核電站新娜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏既绩。R本人自食惡果不足惜概龄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望饲握。 院中可真熱鬧私杜,春花似錦、人聲如沸救欧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笆怠。三九已至铝耻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹬刷,已是汗流浹背瓢捉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留箍铭,地道東北人泊柬。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像诈火,于是被迫代替她去往敵國(guó)和親兽赁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容