他媽的 Python(1):怎麼發起一個同步的 HTTP 請求

他媽的 Python(1):怎麼發起一個同步的 HTTP 請求

向來是個粗俗的人,現在參與了一個高大上的項目開發。不知道以後博客裏還讓不讓說「他媽的」了。要是他媽的不讓說了,我這博客還真不想寫。

爲什麼這麼寫他媽的博客的,都一個個裝的人模狗樣的,博客不就一筆記麼?我就當個筆記用,誰愛看誰看,有問題問我,我也不一定回答。倒不是懶得理你,而是一般你問的問題,我他媽的也不會啊。

人家寫入門博客都是從 hello world 開始,print 一下。我覺得沒意思,項目裏用到一次小小的 spider,用我不太熟悉的 python 實現了一下。你問爲神馬用他媽的 python?臥槽,不都說 python 效率高、屌的一逼嗎?試試唄。腳本語言,就 perl 和 python 牛逼(bash 有時候必須得用,這個咱先不提),perl 處理個文本啊、寫個自動代碼生成器啊,比較牛逼。但是 python 可以很牛逼地寫業務啊、寫邏輯啊,好像效率很高的樣子。

先發個同步請求再說

咱言歸正個傳,這個 python 裏頭也有 import 的概念(類似於 java、objective-c 的 import,或者 c、c++ 的 include 醬)。今兒咱們要 import 的庫叫「urllib2」,我他媽也不知道這個 2 是啥意思,估計之前有個老版本,這個 2 就是新版本唄。但這他媽的也不重要吧,你先會寫再說。

看段代碼(我真他媽的囉嗦啊,才上代碼,可能年齡大了,變話嘮了):

url = "http://www.clubapp.com.cn"
req = urllib2.Request(url)
resp = urllib2.urlopen(req)

這就搞定了,發個同步 HTTP 請求,再 response 一下。「So easy!媽媽再也不用擔心我的編程!」從這麼一小段代碼你他媽的就能看出來,這雞巴 python 是個動態語言啊,我勒個擦擦,實例化的時候連他媽的類型都不用指定啊,這對於一個不常寫動態語言的大銳哥來說,真心看着不舒服。

另外你還會發現這雞巴函數怎麼有兩種:

  • 大寫開頭的Request
  • 小寫開頭的urlopen

我沒查,以下都是瞎說:Request(...)這貨像構造函數(constructor)啊,構造出一個 request,所以是大寫開頭。另外那個urlopen就是純純的呆萌的小函數而已,大寫你個龜孫啊。

咋改 HTTP 請求頭啊?

這個得會,要不咋僞裝啊?不僞裝小爬蟲都不好寫啊:

hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
    'Accept-Encoding': 'none',
    'Accept-Language': 'en-US,en;q=0.8',
    'Connection': 'keep-alive'}

pageReq = urllib2.Request(pageUrl, headers=hdr)

嘿!有意思吧,你看這個Request函數第二個參數,形參名字直接寫在裏面,再表示等於實參就搞定了。這不錯,由此猜測是不是參數順序也不重要?只要帶上形參名字?不知道啊,先留着,待會兒查查。這樣的好處有點類似於 objective-c,就是你要帶着形參名字,就很容易知道參數意思,否則 coding 的時候老要點到函數的定義裏面去看(比如寫 java、c、c++ 的時候)。

怎麼從 response 裏得到返回碼啊

HTTP 返回 404、200 還是什麼鬼,這個得知道吧?

rescode = resp.getcode()

就是你上面得到那個,調用下getcode得到的就可以和數字比較啦。

怎麼從個 response 裏得到響應的數據啊?

就這句:

data = res.read()

比如你要是請求的是個圖片,這貨可以直接寫入到文件裏,就保存到磁盤了。你要是請求的是個網頁,這貨直接就是 html 了,你可以打印出來瞧瞧:

print("response: \n" + data)

上面的打印裏你可以看到,python 中字符串拼接和 java 一樣,很方便吧。

對了,提一點,python 最最不爽的,是嚴格縮進。媽了個巴子的,這玩意兒能折騰死人(但是我相信有很好的 IDE 或者 emacs/vim 插件可以解決,只是我現在還木有去搜尋)。這就留作後話吧,像我這麼囉嗦的人,這次就講這麼多吧。太多知識,主要不是篇幅有限,是他媽的我就會這麼多啊。

遺留問題

  • Q:因爲要帶形參名字,函數參數順序能隨便改不?
  • A:隨便搜了下,發現也可以不帶形參名字,但是不帶的話就必須保證和定義順序一樣(媽了個巴子的)。帶上呢順序自己隨便玩,被老子蒙對了,突然覺得自己好牛逼。

  • 作者:大銳哥

  • 地址:http://blog.csdn.net/prevention
  • 參與項目:http://www.clubapp.com.cn
  • 轉載註明來自:http://blog.csdn.net/prevention
發佈了153 篇原創文章 · 獲贊 3 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章