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。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章