Python學(xué)習(xí)筆記十六(HTTP協(xié)議)

HTTP協(xié)議

什么是HTTP協(xié)議[1]

超文本傳輸協(xié)議(HTTP钓株,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議却紧。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。
簡(jiǎn)單來說就是一種規(guī)則惨撇,一種規(guī)定伊脓。

HTTP是基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù),默認(rèn)使用80端口魁衙。瀏覽器瀏覽網(wǎng)頁使用的就是HTTP協(xié)議报腔,也就是說你在訪問網(wǎng)頁就是在使用HTTP協(xié)議。

網(wǎng)頁瀏覽的過程分析

在瀏覽器中出入網(wǎng)址 http://blog.csdn.net/f704084109 信息會(huì)被瀏覽器發(fā)送到csdn 的服務(wù)器纺棺,服務(wù)器給出反饋,瀏覽器接收到之后對(duì)數(shù)據(jù)進(jìn)行解釋邪狞。

步驟如下

  • 瀏覽器首先向服務(wù)器發(fā)送HTTP請(qǐng)求
  • 服務(wù)器向?yàn)g覽器返回HTTP響應(yīng)
  • 如果瀏覽器還需要繼續(xù)向服務(wù)器請(qǐng)求其他資源祷蝌,比如圖片,就再次發(fā)出HTTP請(qǐng)求帆卓,重復(fù)以上步驟

HTTP請(qǐng)求

HTTP請(qǐng)求一般包括 請(qǐng)求頭+空行+請(qǐng)求體巨朦,其中請(qǐng)求頭的第一行也可以稱為請(qǐng)求首行。

截圖
理論圖

使用Python 模擬HTTP 請(qǐng)求

import socket

if __name__ == '__main__':
    # 創(chuàng)建tcp客戶端socket
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 建立連接 
    # tcp_client_socket.connect(("115.239.210.27", 443))
    tcp_client_socket.connect(("110.80.135.14", 80))

    # 發(fā)送數(shù)據(jù)
    # http 請(qǐng)求
    #   請(qǐng)求首行  ==》請(qǐng)求方式(八種剑令,常用兩種GET and POST)
    #   請(qǐng)求頭
    #   空行
    #   請(qǐng)求體
    head = "GET / HTTP/1.1\r\n"  # 請(qǐng)求方式 請(qǐng)求地址 HTTP/1.1 (請(qǐng)求首行的格式)
    head += "Host: tool.chinaz.com\r\n"
    head += "Connection: keep-alive\r\n"
    head += "Cache-Control: max-age=0\r\n"
    head += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n"
    head += "Upgrade-Insecure-Requests: 1\r\n"
    head += "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\r\n"
    head += "Referer: https://www.baidu.com/link?url=afpMfCo1NMtFumAHT3m3nlMewV58ME68wzSXkMYm1Mc16Mtqc3w0tP9zChcTnmx0&wd=&eqid=c3b3724400081504000000045aef27ee\r\n"
    head += "Accept-Encoding: gzip, deflate, sdch\r\n"
    head += "Accept-Language: zh-CN,zh;q=0.8\r\n"
    head += "Cookie: qHistory=aHR0cDovL3Rvb2wuY2hpbmF6LmNvbSvnq5nplb/lt6Xlhbc=; UM_distinctid=163363420b283-0d8a48d0d369eb-3e70055f-1fa400-163363420ba2c9; CNZZDATA5082706=cnzz_eid%3D1074704039-1525620421-null%26ntime%3D1525620421; mainurl=%20\r\n"

    request = head + "\r\n"

    tcp_client_socket.send(request.encode("utf-8"))
    # 接收數(shù)據(jù)
    recv_data = tcp_client_socket.recv(1024)
    # 對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行解碼

    recv_content = recv_data.decode("utf-8",errors="ignore")
    print(recv_content)
    # 關(guān)閉客戶端socket
    tcp_client_socket.close()

# 運(yùn)行結(jié)果:
# HTTP/1.1 200 OK
# Cache-Control: private
# Content-Length: 6305
# Content-Type: text/html; charset=utf-8
# Content-Encoding: gzip
# Server: Microsoft-IIS/7.5
# X-AspNet-Version: 4.0.30319
# X-Powered-By: ASP.NET
# Date: Sun, 06 May 2018 16:19:27 GMT
# 
# ?hC?PaF?Bk?? "xBLZ?0? ,a| ??m/N9???BG?

模擬訪問了百度糊啡,結(jié)果被限制了(;′⌒`) 吁津,換了一個(gè)網(wǎng)站 棚蓄,成功得到數(shù)據(jù)堕扶,雖然亂碼,但是也說明了梭依,模擬HTTP協(xié)議是成功的稍算。

HTTP響應(yīng)

這些返回的內(nèi)容是啥? 是服務(wù)器給出的響應(yīng),反饋役拴。

響應(yīng)有啥糊探? 響應(yīng)頭+空行+響應(yīng)體 ,響應(yīng)頭第一行也叫響應(yīng)首行或者響應(yīng)行

截圖
理論圖

使用Python 模擬HTTP服務(wù)器給客戶端發(fā)送響應(yīng)


import socket


def main():
    """創(chuàng)建一個(gè)瀏覽器可以訪問的tcp服務(wù)器"""

    # 創(chuàng)建tcp服務(wù)器
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 重用
    tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    tcp_server.bind(("", 8877))
    tcp_server.listen(128)

    # 循環(huán)接收用戶的請(qǐng)求
    while True:
        client, address = tcp_server.accept()
        # 接收數(shù)據(jù)
        data = client.recv(1024).decode("utf-8")
        print(data)

        # 響應(yīng)的格式
        # 響應(yīng)頭
        # 空行
        # 響應(yīng)體

        header = "HTTP/1.1 200 OK\r\n"
        header += "Content-type:text/html;charset=utf-8\r\n"
        header += "Content-length:5\r\n"
        body = "DragonFang 歡迎你"

        content = header + "\r\n" + body

        # 返回一個(gè)數(shù)據(jù)
        client.send(content.encode("utf-8"))

        # 關(guān)閉連接
        client.close()

    # 關(guān)閉
    tcp_server.close()


if __name__ == '__main__':
    main()

# 使用上面的客戶端訪問這個(gè)服務(wù)端
# 服務(wù)端結(jié)果: 請(qǐng)求信息
# GET / HTTP/1.1
# Host: tool.chinaz.com
# Connection: keep-alive
# Cache-Control: max-age=0
# Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
# Upgrade-Insecure-Requests: 1
# User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
# Referer: https://www.baidu.com/link?url=afpMfCo1NMtFumAHT3m3nlMewV58ME68wzSXkMYm1Mc16Mtqc3w0tP9zChcTnmx0&wd=&eqid=c3b3724400081504000000045aef27ee
# Accept-Encoding: gzip, deflate, sdch
# Accept-Language: zh-CN,zh;q=0.8
# Cookie: qHistory=aHR0cDovL3Rvb2wuY2hpbmF6LmNvbSvnq5nplb/lt6Xlhbc=; UM_distinctid=163363420b283-0d8a48d0d369eb-3e70055f-1fa400-163363420ba2c9; CNZZDATA5082706=cnzz_eid%3D1074704039-1525620421-null%26ntime%3D1525620421; mainurl=%20

# 客戶端結(jié)果:  響應(yīng)信息
# HTTP/1.1 200 OK
# Content-type:text/html;charset=utf-8
# Content-length:5
# 
# DragonFang 歡迎你

記錄
HTTP協(xié)議---HTTP請(qǐng)求中的常用請(qǐng)求字段和HTTP的響應(yīng)狀態(tài)碼及響應(yīng)頭


到此結(jié)?DragonFangQy 2018.5.7


  1. http 百度百科 ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末河闰,一起剝皮案震驚了整個(gè)濱河市科平,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姜性,老刑警劉巖瞪慧,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異污抬,居然都是意外死亡汞贸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門印机,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矢腻,“玉大人,你說我怎么就攤上這事射赛《喔蹋” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵楣责,是天一觀的道長(zhǎng)竣灌。 經(jīng)常有香客問我,道長(zhǎng)秆麸,這世上最難降的妖魔是什么初嘹? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮沮趣,結(jié)果婚禮上屯烦,老公的妹妹穿的比我還像新娘。我一直安慰自己房铭,他們只是感情好驻龟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缸匪,像睡著了一般翁狐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凌蔬,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天露懒,我揣著相機(jī)與錄音闯冷,去河邊找鬼。 笑死隐锭,一個(gè)胖子當(dāng)著我的面吹牛窃躲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钦睡,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蒂窒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了荞怒?” 一聲冷哼從身側(cè)響起洒琢,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎褐桌,沒想到半個(gè)月后衰抑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荧嵌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年呛踊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啦撮。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谭网,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赃春,到底是詐尸還是另有隱情愉择,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布织中,位于F島的核電站锥涕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏狭吼。R本人自食惡果不足惜层坠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刁笙。 院中可真熱鬧破花,春花似錦、人聲如沸采盒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磅氨。三九已至,卻和暖如春嫡纠,著一層夾襖步出監(jiān)牢的瞬間烦租,已是汗流浹背延赌。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叉橱,地道東北人挫以。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像窃祝,于是被迫代替她去往敵國(guó)和親掐松。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • 一粪小、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,333評(píng)論 6 152
  • HTTP概述 超文本傳輸協(xié)議(HTTP大磺,HyperText Transfer Protocol) 是互聯(lián)網(wǎng)上應(yīng)用最...
    曹淵說創(chuàng)業(yè)閱讀 3,841評(píng)論 2 61
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,210評(píng)論 3 82
  • 前言:最近發(fā)現(xiàn)自己在網(wǎng)絡(luò)相關(guān)這一塊基礎(chǔ)很是欠缺探膊,所以準(zhǔn)備花時(shí)間了解一下杠愧,本文主要是講http協(xié)議的一些基礎(chǔ),和一些...
    justCode_閱讀 2,093評(píng)論 0 23
  • 本文整理自MIN飛翔博客 [1] 1. 概念 協(xié)議是指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或...
    HoyaWhite閱讀 2,656評(píng)論 2 20