網(wǎng)絡(luò)爬蟲1--http協(xié)議和urllib

爬蟲初步

爬蟲概念

都有哪些語言可以實(shí)現(xiàn)爬蟲

? (1)php, 號稱世界上最好的語言膘盖,可以實(shí)現(xiàn)爬蟲,但做的不好,天生對多進(jìn)程和多線程支持的不好

? (2)java瘦棋,可以實(shí)現(xiàn),而且做的非常好,是python爬蟲最主要的競爭對手, 但語言不簡潔伐庭,代碼臃腫粉渠,重構(gòu)成本高 (3)c、c++圾另,也可以實(shí)現(xiàn)爬蟲霸株,非常強(qiáng)大,但是不是一個好的選擇 (4)python集乔,可以實(shí)現(xiàn)去件,號稱世界上最優(yōu)雅的語言,代碼簡潔扰路,學(xué)習(xí)成本低尤溜,執(zhí)行效率也好,而且還有一個非常強(qiáng)大的爬蟲框架 scrapy

通用爬蟲

? 例子:百度汗唱、谷歌宫莱、360、搜狗哩罪、必應(yīng)等等授霸,搜索引擎

? 工作: (1)爬取互聯(lián)網(wǎng)所有的數(shù)據(jù) (2)對數(shù)據(jù)存儲并且處理 (3)給用戶提供檢索服務(wù) 如何讓百度抓取你的網(wǎng)站? (1)靜靜地等待际插,百度會和DNS服務(wù)商合作 (2)主動提交自己的url (3)在其它網(wǎng)站設(shè)置友情鏈接 我的網(wǎng)站不想讓百度抓鹊舛? 君子協(xié)議腹鹉,口頭協(xié)議藏畅,robots協(xié)議 存放到網(wǎng)站的根目錄下,限制搜索引擎可以爬取哪些,不可以爬取哪些

<pre spellcheck="false" class="md-fences md-end-block contain-cm modeLoaded" lang="" contenteditable="false" cid="n26" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 0.9em; white-space: normal; display: block; page-break-inside: avoid; text-align: left; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(223, 226, 229); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: inherit inherit; background-repeat: inherit inherit;">##### 如何提升網(wǎng)站排名(SEO)</pre>

? (1)pagerank值排名愉阎,根據(jù)點(diǎn)擊量绞蹦、瀏覽量等,相當(dāng)靠譜

? (2)競價排名

<pre spellcheck="false" class="md-fences md-end-block contain-cm modeLoaded" lang="" contenteditable="false" cid="n31" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 0.9em; white-space: normal; display: block; page-break-inside: avoid; text-align: left; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(223, 226, 229); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: inherit inherit; background-repeat: inherit inherit;">##### 通用爬蟲缺點(diǎn):</pre>

? (1)抓取很多數(shù)據(jù)都是無效的

? (2)不能根據(jù)自己的需求抓取數(shù)據(jù)

聚焦爬蟲

? 根據(jù)自己特定的需求榜旦,來抓取指定的數(shù)據(jù)

? 如何實(shí)現(xiàn)聚焦爬蟲幽七? 網(wǎng)頁的特點(diǎn): (1)網(wǎng)頁都有自己唯一的url (2)網(wǎng)頁都是由html組成 (3)網(wǎng)頁傳輸都是使用http、https協(xié)議

思路:

? (1)給一個url

? (2)模擬瀏覽器發(fā)送http請求 (3)從html結(jié)構(gòu)中提取指定的數(shù)據(jù)溅呢,從字符串中根據(jù)規(guī)則提取指定數(shù)據(jù)

開發(fā)環(huán)境:

? windows系統(tǒng)澡屡,python3.x(64位),sublime編輯器咐旧,pycharm,vscode

整體內(nèi)容:

? (1)涉及到的python庫

? urllib,requests,selenium,jsonpath,lxml等一些庫 (2)解析內(nèi)容 正則表達(dá)式解析室埋,bs4解析姚淆,xpath解析腌逢,jsonpath解析 (3)采集動態(tài)html DOM操作搏讶,動態(tài)的添加或者刪除節(jié)點(diǎn)窍蓝,selenium+phantomjs (4)scrapy框架 異步高性能網(wǎng)絡(luò)爬蟲框架的學(xué)習(xí) (5)scrapy-redis分布式部署 在scrapy的基礎(chǔ)上繁成,多了一套分布式部署的組件 (6)涉及到的爬蟲-反爬蟲-反反爬蟲之間的斗爭 反爬會傷害真實(shí)的用戶巾腕,一般情況下尊搬,反爬也就這么兩點(diǎn):第一個UA佛寿,第二個封ip常侣,第三個驗(yàn)證碼胳施,光學(xué)識別肢专,打碼平臺 換思路解決問題:其他網(wǎng)站博杖,手機(jī)端等

關(guān)于http協(xié)議

http和https的區(qū)別

? HTTPS和HTTP的區(qū)別主要如下: 1剃根、https協(xié)議需要到ca申請證書跟继,一般免費(fèi)證書較少舔糖,因而需要一定費(fèi)用金吗。 2摇庙、http是超文本傳輸協(xié)議卫袒,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議宝穗。 3逮矛、http和https使用的是完全不同的連接方式须鼎,用的端口也不一樣晋控,前者是80,后者是443杉辙。 4蜘矢、http的連接很簡單品腹,是無狀態(tài)的舞吭;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸羡鸥、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全惧浴。

加密:公鑰私鑰

? 客戶端:123456用秘鑰加密=======》服務(wù)端:用秘鑰解密得到123456 秘鑰相同稱之為對稱加解密 秘鑰不相同稱之為非對稱加解密 客戶端:123456用公鑰加密=======》服務(wù)端:用私鑰解密得到123456 http協(xié)議學(xué)習(xí):

請求:包含請求行衷旅、請求頭柿顶、請求內(nèi)容

請求行:請求方式嘁锯、請求資源猪钮、協(xié)議版本號

請求頭:

  • accept:瀏覽器通過這個頭告訴服務(wù)器,它所支持的數(shù)據(jù)類型

  • Accept-Charset: 瀏覽器通過這個頭告訴服務(wù)器肘交,它支持哪種字符集

  • Accept-Encoding:瀏覽器通過這個頭告訴服務(wù)器,支持的壓縮格式

  • Accept-Language:瀏覽器通過這個頭告訴服務(wù)器腻要,它的語言環(huán)境

  • Host:瀏覽器通過這個頭告訴服務(wù)器雄家,想訪問哪臺主機(jī)If-Modified-Since: 瀏覽器通過這個頭告訴服務(wù)器趟济,緩存數(shù)據(jù)的時間

  • Referer:瀏覽器通過這個頭告訴服務(wù)器顷编,客戶機(jī)是哪個頁面來的 防盜鏈

  • Connection:瀏覽器通過這個頭告訴服務(wù)器媳纬,請求完后是斷開鏈接還是何持鏈接

  • X-Requested-With: XMLHttpRequest 代表是ajax的請求

    響應(yīng):響應(yīng)行钮惠、響應(yīng)頭萌腿、響應(yīng)內(nèi)容

響應(yīng)行里面毁菱,常見的狀態(tài)碼
  • 200:請求成功 處理方式:獲得響應(yīng)的內(nèi)容锌历,進(jìn)行處理

  • 301:請求到的資源都會分配一個永久的URL究西,這樣就可以在將來通過該URL來訪問此資源 處理方式:重定向到分配的URL

  • 302:請求到的資源在一個不同的URL處臨時保存 處理方式:重定向到臨時的URL

  • 304:請求的資源未更新 處理方式:丟棄卤材,使用本地緩存文件

  • 403:禁止 處理方式:丟棄

  • 404:沒有找到 處理方式:丟棄

  • 405:請求方式不對

  • 500:服務(wù)器內(nèi)部錯誤 服務(wù)器遇到了一個未曾預(yù)料的狀況扇丛,導(dǎo)致了它無法完成對請求的處理帆精。一般來說隧魄,這個問題都會在服務(wù)器端的源代碼出現(xiàn)錯誤時出現(xiàn)购啄。

響應(yīng)頭

Location: 服務(wù)器通過這個頭嘱么,來告訴瀏覽器跳到哪里

  • Server:服務(wù)器通過這個頭几迄,告訴瀏覽器服務(wù)器的型號

  • Content-Encoding:服務(wù)器通過這個頭乓旗,告訴瀏覽器集索,數(shù)據(jù)的壓縮格式

  • Content-Length: 服務(wù)器通過這個頭妆距,告訴瀏覽器回送數(shù)據(jù)的長度

  • Content-Language: 服務(wù)器通過這個頭函匕,告訴瀏覽器語言環(huán)境

  • Content-Type:服務(wù)器通過這個頭中剩,告訴瀏覽器回送數(shù)據(jù)的類型

  • Refresh:服務(wù)器通過這個頭结啼,告訴瀏覽器定時刷新

  • Content-Disposition: 服務(wù)器通過這個頭郊愧,告訴瀏覽器以下載方式打數(shù)據(jù)

  • Transfer-Encoding:服務(wù)器通過這個頭属铁,告訴瀏覽器數(shù)據(jù)是以分塊方式回送的

  • Expires: -1 控制瀏覽器不要緩存

  • Cache-Control: no-cache

  • Pragma: no-cache

響應(yīng)內(nèi)容:html焦蘑、css喇肋、js蝶防、圖片

抓包工具

(1)谷歌瀏覽器自帶抓包工具 右鍵開發(fā)者工具==》network XHR: XMLHttpReqeust 前端要想發(fā)送ajax請求明吩,通過它創(chuàng)建對象低葫,發(fā)送請求 query_string_parameters : 請求字符串,get參數(shù) formdata : 如果是post參數(shù)(2)專業(yè)工具嘿悬,fiddler善涨,charles…… 專業(yè)抓包工具钢拧,比谷歌強(qiáng)在了跳轉(zhuǎn)的時候很多請求都能抓取到 前端要像發(fā)送ajax請求源内,創(chuàng)建對象調(diào)用對象方法需要通過XHR

urllib庫

? urllib庫是自帶的python庫份殿,模擬發(fā)送http請求 在python 2系列中使用:urllib urllib2 在python 3系列中使用:urllib

urllib庫的使用

  1. urllib.request 模擬發(fā)送請求

    • urlopen(url) : 向url發(fā)送請求颂斜,得到響應(yīng)對象

      <pre spellcheck="false" class="md-fences md-end-block contain-cm modeLoaded" lang="python" contenteditable="false" cid="n213" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 0.9em; white-space: normal; display: block; page-break-inside: avoid; text-align: left; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(223, 226, 229); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; background-position: inherit inherit; background-repeat: inherit inherit;">import urllib.request
      url = 'http://www.baidu.com/'
      ?
      response = urllib.request.urlopen(url)
      ?
      print(response)
      print(response.read())</pre>

    可以看到結(jié)果如下:

    [圖片上傳失敗...(image-6c985d-1533895191853)]

    • print(response.read().decode('utf8')):得到了二進(jìn)制的格式腔寡,下一步我們需要使用decode將二進(jìn)制格式解碼為字符串格式

      response屬性和方法
    • print(response.url):拿到請求的url

    • print(response.headers):拿到請求的headers

    • print(response.status):拿到請求的狀態(tài)碼

    • urllib.parse: 處理參數(shù)或者url

    • urllib.error: 如何處理異常

保存到文件

? 將抓取的數(shù)據(jù)保存到文件有兩種方式:

第一種方式:通過with打開文件(注意統(tǒng)一編碼格式)

  1. <pre spellcheck="false" class="md-fences md-end-block contain-cm modeLoaded" lang="python" contenteditable="false" cid="n249" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 0.9em; white-space: normal; display: block; page-break-inside: avoid; text-align: left; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(223, 226, 229); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 0px; width: inherit; background-position: inherit inherit; background-repeat: inherit inherit;"># 將獲取的響應(yīng)內(nèi)容保存到文件中

    with open('baidu1.html', 'a', encoding='utf8') as fp:

    fp.write(response.read().decode('utf8'))

    ?

    以二進(jìn)制的格式保存

    with open('baidu2.html', 'wb') as fp:

    fp.write(response.read())</pre>

第二種方式:直接以二進(jìn)制的格式寫入

<pre spellcheck="false" class="md-fences md-end-block contain-cm modeLoaded" lang="python" contenteditable="false" cid="n252" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 0.9em; white-space: normal; display: block; page-break-inside: avoid; text-align: left; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(223, 226, 229); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: inherit inherit; background-repeat: inherit inherit;"># 實(shí)現(xiàn)發(fā)送請求焚鲜,將內(nèi)容寫入文件

urllib.request.urlretrieve(url, 'baidu3.html')</pre>

    • urlretrieve(url, filepath) : 向url發(fā)送請求,直接將響應(yīng)寫入到filepath中
  • 編碼:

    • 字符串格式==》字節(jié)格式

      encode('utf8')

    • 字節(jié)格式==》字符串格式

      decode('gbk')

爬取圖片的保存

? 下載圖片:得到圖片的src屬性放前,就可以將圖片下載到本地

? 有兩種方式忿磅,主要是對圖片是做二進(jìn)制的處理:

<pre spellcheck="false" class="md-fences md-end-block contain-cm modeLoaded" lang="python" contenteditable="false" cid="n280" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 0.9em; white-space: normal; display: block; page-break-inside: avoid; text-align: left; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(223, 226, 229); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: inherit inherit; background-repeat: inherit inherit;">import urllib.request
?
url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1533639915215&di=1bbd3901c9991b363ac0211dc861a909&imgtype=0&src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2F225a5f3f75d1d4c59532704782eebd25d323fd801e57a-VlY5c4_fw658'
?

第一種方式,發(fā)送請求凭语,獲取響應(yīng)

?
response = urllib.request.urlopen(url)
?
with open('meinv.jpg', 'wb') as fp:
?
fp.write(response.read())
?

第二種方式葱她,

?
urllib.request.urlretrieve(url, 'meinv2.png')</pre>

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吨些,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斩萌,老刑警劉巖霎苗,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件答倡,死亡現(xiàn)場離奇詭異港庄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門酌伊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事厚棵。” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵宋列,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任氯材,我火速辦了婚禮冗尤,結(jié)果婚禮上背零,老公的妹妹穿的比我還像新娘侦镇。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布昵观。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挂捻。 梳的紋絲不亂的頭發(fā)上捧搞,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天婚瓜,我揣著相機(jī)與錄音柠座,去河邊找鬼。 笑死廊营,一個胖子當(dāng)著我的面吹牛露筒,可吹牛的內(nèi)容都是我干的蜗巧。 我是一名探鬼主播幕屹,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼迅诬!你這毒婦竟也來了上遥?” 一聲冷哼從身側(cè)響起回俐,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稀并,沒想到半個月后仅颇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稻轨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年灵莲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殴俱。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枚抵,靈堂內(nèi)的尸體忽然破棺而出线欲,到底是詐尸還是另有隱情,我是刑警寧澤汽摹,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布李丰,位于F島的核電站,受9級特大地震影響逼泣,放射性物質(zhì)發(fā)生泄漏趴泌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一拉庶、第九天 我趴在偏房一處隱蔽的房頂上張望嗜憔。 院中可真熱鬧,春花似錦氏仗、人聲如沸吉捶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呐舔。三九已至币励,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間珊拼,已是汗流浹背食呻。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澎现,地道東北人仅胞。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像昔头,于是被迫代替她去往敵國和親饼问。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理揭斧,服務(wù)發(fā)現(xiàn)莱革,斷路器,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 一讹开、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,330評論 6 152
  • 前言:最近發(fā)現(xiàn)自己在網(wǎng)絡(luò)相關(guān)這一塊基礎(chǔ)很是欠缺盅视,所以準(zhǔn)備花時間了解一下,本文主要是講http協(xié)議的一些基礎(chǔ)旦万,和一些...
    justCode_閱讀 2,092評論 0 23
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架闹击,建立于...
    Hsinwong閱讀 22,313評論 1 92
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,203評論 3 82