1. 程式人生 > >Python--urllib3庫詳解

Python--urllib3庫詳解

Python--urllib3庫詳解


 

   Urllib3是一個功能強大,條理清晰,用於HTTP客戶端的Python庫,許多Python的原生系統已經開始使用urllib3Urllib3提供了很多python標準庫裡所沒有的重要特性:

               1、 執行緒安全

          2、 連線池

          3、 客戶端SSL/TLS驗證

          4、 檔案分部編碼上傳

          5、 協助處理重複請求和HTTP重定位

          6、 支援壓縮編碼

          7、 支援HTTPSOCKS代理

          8、 100%測試覆蓋率

   Urllib3功能非常強大,但是用起來卻十分簡單:

          

安裝:

  Urllib3 能通過pip來安裝:

         $pip install urllib3

  你也可以在github上下載最新的原始碼,解壓之後進行安裝:

         $git clone git://github.com/shazow/urllib3.git

         $python setup.py install

urllib3的使用:

   生成請求(request):

   首先,你必須匯入urllib3模組:

          

   然後你需要一個PoolManager例項來生成請求,由該例項物件處理與執行緒池的連線以及執行緒安全的所有細節,不需要任何人為操作:

          

   通過request()方法建立一個請求:

          

   request()方法返回一個

HTTPResponse物件。

   你還可以通過request()方法向請求(request)中新增一些其他資訊,如:

          

   請求(request)中的資料項(request data)可包括:

   Headers:

   在request()方法中,可以定義一個字典型別(dictionary),並作為headers引數傳入:

          

   Query parameters:

   對於GETHEADDELETE請求,可以簡單的通過定義一個字典型別作為fields引數傳入即可:

          

   對於POSTPUT請求(request),需要手動對傳入資料進行編碼,然後加在URL之後:

          

   Form data:

   對於PUTPOST請求(request),urllib3會自動將字典型別的field引數編碼成表格型別.

   JSON:

   在發起請求時,可以通過定義body 引數並定義headersContent-Type引數來發送一個已經過編譯的JSON資料:

          

   Files & binary data:

   使用multipart/form-data編碼方式上傳檔案,可以使用和傳入Form data資料一樣的方法進行,並將檔案定義為一個元組的形式     (file_name,file_data):

          

   檔名(filename)的定義不是嚴格要求的,但是推薦使用,以使得表現得更像瀏覽器。同時,還可以向元組中再增加一個數據來定義檔案的 MIME型別:

          

   如果是傳送原始二進位制資料,只要將其定義為body引數即可。同時,建議對headerContent-Type引數進行設定:

          

   Timeout :

   使用timeout,可以控制請求的執行時間。在一些簡單的應用中,可以將timeout引數設定為一個浮點數:

          

   要進行更精細的控制,可以使用Timeout例項,將連線的timeout和讀的timeout分開設定:

          

   如果想讓所有的request都遵循一個timeout,可以將timeout引數定義在PoolManager中:

          

   或者

          

   當在具體的request中再次定義timeout時,會覆蓋PoolManager層面上的timeout

   請求重試(retrying requests):

   Urllib3 可以自動重試冪等請求,原理和handles redirect一樣。可以通過設定retries引數對重試進行控制。Urllib3預設進行3次請求重  試,並進行3次方向改變。

   給retries引數定義一個整型來改變請求重試的次數:

          

   關閉請求重試(retrying request)及重定向(redirect)只要將retries定義為False即可:

          

   關閉重定向(redirect)但保持重試(retrying request),redirect引數定義為False即可:

          

   要進行更精細的控制,可以使用retry例項,通過該例項可以對請求的重試進行更精細的控制。

   例如,進行3次請求重試,但是隻進行2次重定向:

          

   如果想讓所有請求都遵循一個retry策略,可以在PoolManager中定義retry引數:

          

   或者

          

   當在具體的request中再次定義retry時,會覆蓋 PoolManager層面上的retry。