[Python—英文]Request –有用的python模組

來源:互聯網
上載者:User
文章目錄
  • urllib2 
  • Requests
  • 這是urllib2的方法:
  • Requests 

ref: http://dancallahan.info/journal/python-requests/

Title: 有用的python模組

在HTTP相關處理中使用python是不必要的麻煩,這包括urllib2模組以巨大的複雜性代價擷取綜合性的功能。相比於urllib2,Kenneth Reitz的Requests模組更能簡約的支援完整的簡單用例。


簡單的例子:
想象下我們試圖使用get方法從http://example.test/擷取資源並且查看傳回碼,content-type頭資訊,還有response的主體內容。這件事無論使用urllib2 或者Requests都是很容易實現的。
urllib2 

>>> import urllib2>>> url = 'http://example.test/'>>> response = urllib2.urlopen(url)>>> response.getcode()200>>> response.headers.getheader('content-type')'text/html; charset=utf-8'>>> response.read()'Hello, world!'
Requests
>>> import requests>>> url = 'http://example.test/'>>> response = requests.get(url)>>> response.status_code200>>> response.headers['content-type']'text/html; charset=utf-8'>>> response.contentu'Hello, world!'

這兩種方法很相似,相對於urllib2調用方法讀取response中的屬性資訊,Requests則是使用屬性名稱來擷取對應的屬性值。
兩者還有兩個細微但是很重要的差別:

1 Requests 自動的把返回資訊有Unicode解碼

2 Requests 自動儲存了返回內容,所以你可以讀取多次,而不像urllib2.urlopen()那樣返回的只是一個類似檔案類型只能讀取一次的對象。


第二點是在python互動式環境下作業碼很令人討厭的事情

一個複雜一點的例子:

現在讓我們嘗試下複雜點得例子:使用GET方法擷取http://foo.test/secret的資源,這次需要基本的http驗證。使用上面的代碼作為模板,好像我們只要把urllib2.urlopen() 到requests.get()之間的代碼換成可以發送username,password的請求就行了

這是urllib2的方法:
>>> import urllib2>>> url = 'http://example.test/secret'>>> password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()>>> password_manager.add_password(None, url, 'dan', 'h0tdish')>>> auth_handler = urllib2.HTTPBasicAuthHandler(password_manager)>>> opener = urllib2.build_opener(auth_handler)>>> urllib2.install_opener(opener)>>> response = urllib2.urlopen(url)>>> response.getcode()200>>> response.read()'Welcome to the secret page!'

一個簡單的方法中執行個體化了2個類,然後組建了第三個類,最後還要裝載到全域的urllib2模組中,最後才調用了urlopen,那麼那兩個複雜的類是什麼的

迷惑了嗎,  這裡所有urllib2的文檔 http://docs.python.org/release/2.7/library/urllib2.html

那Requests是怎麼樣解決同樣的問題的呢?

Requests 

>>> import requests>>> url = 'http://example.test/secret'>>> response = requests.get(url, auth=('dan', 'h0tdish'))>>> response.status_code200>>> response.contentu'Welcome to the secret page!'

只是在調用方法的時候增加了一個auth關鍵字函數
我敢打賭你不用查文檔也能記住。

錯誤處理 Error Handling

Requests對錯誤的處理也是很非常方面。如果你使用了不正確的使用者名稱和密碼,urllib2會引發一個urllib2.URLError錯誤,然而Requests會像你期望的那樣返回一個正常的response對象。只需查看response.ok的布爾值便可以知道是否登陸成功。

>>> response = requests.get(url, auth=('dan', 'wrongPass'))>>> response.okFalse
其他的一些特性:

* Requests對於HEAD, POST, PUT, PATCH, 和 DELETE方法的api同樣簡單
* 它可以處理多部分上傳,同樣支援自動轉碼
* 文檔更好
* 還有更多

Requests 是很好的,下次需要使用HTTP時候可以試試。

連結:

http://python-requests.org/

http://pypi.python.org/pypi/requests

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.