1. 程式人生 > >Python網路爬蟲http和https協議

Python網路爬蟲http和https協議

一.HTTP協議

  1.官方概念:

    HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。(雖然童鞋們將這條概念都看爛了,但是也沒辦法,畢竟這就是HTTP的權威官方的概念解釋,要想徹底理解,請客觀目移下側......)

  2.白話概念:

    HTTP協議就是伺服器(Server)和客戶端(Client)之間進行資料互動(相互傳輸資料)的一種形式。我們可以將Server和Client進行擬人化,那麼該協議就是Server和Client這兩兄弟間指定的一種互動溝通方式。大家都看過智取威虎山中楊子榮和土匪們之間說的黑話吧:

      - 土匪:蘑菇,你哪路?什麼價?(什麼人?到哪裡去?)

      - 楊子榮:哈!想啥來啥,想吃奶來了媽媽,想孃家的人,孩子他舅舅來了。(找同行)

      - 楊子榮:拜見三爺!

      - 土匪:天王蓋地虎!(你好大的膽!敢來氣你的祖宗?)

      - 楊子榮:寶塔鎮河妖!(要是那樣,叫我從山上摔死,掉河裡淹死。)
      - 土匪:野雞悶頭鑽,哪能上天王山!(你不是正牌的。)
      - 楊子榮:地上有的是米,喂呀,有根底!(老子是正牌的,老牌的。)
      - 土匪:拜見過阿媽啦?(你從小拜誰為師?)
      - 楊子榮:他房上沒瓦,非否非,否非否!(不到正堂不能說。)
      - 土匪:嘛哈嘛哈?(以前獨幹嗎?)
      - 楊子榮:正晌午說話,誰還沒有家?(許大馬棒山上。)
      - 土匪:好叭噠!(內行,是把老手)
      - 楊子榮:天下大耷拉!(不吹牛,闖過大隊頭。)
      - 座山雕:臉紅什麼?
      - 楊子榮:精神煥發!
      - 座山雕:怎麼又黃了?
      - 楊子榮:防冷,塗的蠟!
      - 座山雕:晒噠晒噠。(誰指點你來的?)
      - 楊子榮:一座玲瓏塔,面向青寨背靠沙!(是個道人。)

    是不是看到這裡,有得童鞋終於知道了傳說中的‘天王蓋地虎’是真正含義了吧。此黑話其實就是楊子榮和土匪之間進行互動溝通的方式(協議)。

 

  3.HTTP工作原理:

    HTTP協議工作於客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB伺服器傳送所有請求。Web伺服器根據接收到的請求後,向客戶端傳送響應資訊。

                    

 

  4.HTTP四點注意事項:

    - HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。

    - HTTP是無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。

    - HTTP是媒體獨立的:這意味著,只要客戶端和伺服器知道如何處理的資料內容,任何型別的資料都可以通過HTTP傳送。客戶端以及伺服器指定使用適合的MIME-type內容型別。

    - HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

  5.HTTP之URL:

    HTTP使用統一資源識別符號(Uniform Resource Identifiers, URI)來傳輸資料和建立連線。URL是一種特殊型別的URI,包含了用於查詢某個資源的足夠的資訊

URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,是網際網路上用來標識某一處資源的地址。以下面這個URL為例,介紹下普通URL的各部分組成:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name從上面的URL可以看出,一個完整的URL包括以下幾部分:

    - 協議部分:該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的“//”為分隔符

    - 域名部分:該URL的域名部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為域名使用

    - 埠部分:跟在域名後面的是埠,域名和埠之間使用“:”作為分隔符。埠不是一個URL必須的部分,如果省略埠部分,將採用預設埠

    - 虛擬目錄部分:從域名後的第一個“/”開始到最後一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”

    - 檔名部分:從域名後的最後一個“/”開始到“?”為止,是檔名部分,如果沒有“?”,則是從域名後的最後一個“/”開始到“#”為止,是檔案部分,如果沒有“?”和“#”,那麼從域名後的最後一個“/”開始到結束,都是檔名部分。本例中的檔名是“index.asp”。檔名部分也不是一個URL必須的部分,如果省略該部分,則使用預設的檔名

    - 錨部分:從“#”開始到最後,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分

    - 引數部分:從“?”開始到“#”為止之間的部分為引數部分,又稱搜尋部分、查詢部分。本例中的引數部分為“boardID=5&ID=24618&page=1”。引數可以允許有多個引數,引數與引數之間用“&”作為分隔符。

  6.HTTP之Request:

    客戶端傳送一個HTTP請求到伺服器的請求訊息包括以下組成部分:

    報文頭:常被叫做請求頭,請求頭中儲存的是該請求的一些主要說明(自我介紹)。伺服器據此獲取客戶端的資訊。

        常見的請求頭:

        accept:瀏覽器通過這個頭告訴伺服器,它所支援的資料型別

        Accept-Charset: 瀏覽器通過這個頭告訴伺服器,它支援哪種字符集
        Accept-Encoding:瀏覽器通過這個頭告訴伺服器,支援的壓縮格式
        Accept-Language:瀏覽器通過這個頭告訴伺服器,它的語言環境
        Host:瀏覽器通過這個頭告訴伺服器,想訪問哪臺主機
        If-Modified-Since: 瀏覽器通過這個頭告訴伺服器,快取資料的時間
        Referer:瀏覽器通過這個頭告訴伺服器,客戶機是哪個頁面來的 防盜鏈
        Connection:瀏覽器通過這個頭告訴伺服器,請求完後是斷開連結還是何持連結
        X-Requested-With: XMLHttpRequest 代表通過ajax方式進行訪問

        User-Agent:請求載體的身份標識

    報文體:常被叫做請求體,請求體中儲存的是將要傳輸/傳送給伺服器的資料資訊。

    

  7.HTTP之Response:

    伺服器回傳一個HTTP響應到客戶端的響應訊息包括以下組成部分:

        

    狀態碼:以“清晰明確”的語言告訴客戶端本次請求的處理結果。

        HTTP的響應狀態碼由5段組成: 

        •   1xx 訊息,一般是告訴客戶端,請求已經收到了,正在處理,別急...
        •   2xx 處理成功,一般表示:請求收悉、我明白你要的、請求已受理、已經處理完成等資訊.
        •   3xx 重定向到其它地方。它讓客戶端再發起一個請求以完成整個處理。
        •   4xx 處理髮生錯誤,責任在客戶端,如客戶端的請求一個不存在的資源,客戶端未被授權,禁止訪問等。
        •   5xx 處理髮生錯誤,責任在服務端,如服務端丟擲異常,路由出錯,HTTP版本不支援等。

    相應頭:響應的詳情展示

        常見的相應頭資訊:

            Location: 伺服器通過這個頭,來告訴瀏覽器跳到哪裡
            Server:伺服器通過這個頭,告訴瀏覽器伺服器的型號
            Content-Encoding:伺服器通過這個頭,告訴瀏覽器,資料的壓縮格式
            Content-Length: 伺服器通過這個頭,告訴瀏覽器回送資料的長度
            Content-Language: 伺服器通過這個頭,告訴瀏覽器語言環境
            Content-Type:伺服器通過這個頭,告訴瀏覽器回送資料的型別
            Refresh:伺服器通過這個頭,告訴瀏覽器定時重新整理
            Content-Disposition: 伺服器通過這個頭,告訴瀏覽器以下載方式打資料
            Transfer-Encoding:伺服器通過這個頭,告訴瀏覽器資料是以分塊方式回送的
            Expires: -1 控制瀏覽器不要快取
            Cache-Control: no-cache 
            Pragma: no-cache

    相應體:根據客戶端指定的請求資訊,傳送給客戶端的指定資料

 

二.HTTPS協議   

  1.官方概念:

    HTTPS (Secure Hypertext Transfer Protocol)安全超文字傳輸協議,HTTPS是在HTTP上建立SSL加密層,並對傳輸資料進行加密,是HTTP協議的安全版。

  2.白話概念:

    加密安全版的HTTP協議。

          

  3.HTTPS採用的加密技術

    3.1 SSL加密技術

        SSL採用的加密技術叫做“共享金鑰加密”,也叫作“對稱金鑰加密”,這種加密方法是這樣的,比如客戶端向伺服器傳送一條資訊,首先客戶端會採用已知的演算法對資訊進行加密,比如MD5或者Base64加密,接收端對加密的資訊進行解密的時候需要用到金鑰,中間會傳遞金鑰,(加密和解密的金鑰是同一個),金鑰在傳輸中間是被加密的。這種方式看起來安全,但是仍有潛在的危險,一旦被竊聽,或者資訊被挾持,就有可能破解金鑰,而破解其中的資訊。因此“共享金鑰加密”這種方式存在安全隱患:

          

            

    3.2 非對稱祕鑰加密技術

         “非對稱加密”使用的時候有兩把鎖,一把叫做“私有金鑰”,一把是“公開金鑰”,使用非物件加密的加密方式的時候,伺服器首先告訴客戶端按照自己給定的公開金鑰進行加密處理,客戶端按照公開金鑰加密以後,伺服器接受到資訊再通過自己的私有金鑰進行解密,這樣做的好處就是解密的鑰匙根本就不會進行傳輸,因此也就避免了被挾持的風險。就算公開金鑰被竊聽者拿到了,它也很難進行解密,因為解密過程是對離散對數求值,這可不是輕而易舉就能做到的事。以下是非對稱加密的原理圖:

               

      但是非對稱祕鑰加密技術也存在如下缺點:

        第一個是:如何保證接收端向傳送端發出公開祕鑰的時候,傳送端確保收到的是預先要傳送的,而不會被挾持。只要是傳送金鑰,就有可能有被挾持的風險。

        第二個是:非對稱加密的方式效率比較低,它處理起來更為複雜,通訊過程中使用就有一定的效率問題而影響通訊速度

  4.https的證書機制

    在上面我們講了非對稱加密的缺點,其中第一個就是公鑰很可能存在被挾持的情況,無法保證客戶端收到的公開金鑰就是伺服器發行的公開金鑰。此時就引出了公開金鑰證書機制。數字證書認證機構是客戶端與伺服器都可信賴的第三方機構。證書的具體傳播過程如下:

      1:伺服器的開發者攜帶公開金鑰,向數字證書認證機構提出公開金鑰的申請,數字證書認證機構在認清申請者的身份,稽核通過以後,會對開發者申請的公開金鑰做數字簽名,然後分配這個已簽名的公開金鑰,並將金鑰放在證書裡面,繫結在一起

                

 

 

   

       2:伺服器將這份數字證書傳送給客戶端,因為客戶端也認可證書機構,客戶端可以通過數字證書中的數字簽名來驗證公鑰的真偽,來確保伺服器傳過來的公開金鑰是真實的。一般情況下,證書的數字簽名是很難被偽造的,這取決於認證機構的公信力。一旦確認資訊無誤之後,客戶端就會通過公鑰對報文進行加密傳送,伺服器接收到以後用自己的私鑰進行解密。