Python Requests簡單運用

svoid發表於2015-03-15

Requests簡介

Requests 是使用 Apache2 Licensed 許可證的 HTTP 庫。比Python 標準庫中的 urllib2 模組功能強大。

Requests 使用的是 urllib3,因此繼承了它的所有特性。Requests 支援 HTTP 連線保持和連線池,支援使用 cookie 保持會話,支援檔案上傳,支援自動確定響應內容的編碼,支援國際化的 URL 和 POST 資料自動編碼。

功能特性

Requests 完全滿足如今網路的需求。

  • 國際化域名和 URLs
  • Keep-Alive & 連線池
  • 持久的 Cookie 會話
  • 類瀏覽器式的 SSL 加密認證
  • 基本/摘要式的身份認證
  • 優雅的鍵/值 Cookies
  • 自動解壓
  • Unicode 編碼的響應體
  • 多段檔案上傳
  • 連線超時
  • 支援 .netrc
  • 適用於 Python 2.6—3.4
  • 執行緒安全

牛刀小試

>>> import requests
>>> r = requests.get('http://www.baidu.com')   # 傳送請求
>>> r.status_code                               # 網頁狀態碼
200
>>> r.headers['content-type']                  #響應頭內容
'text/html; charset=utf-8'
>>> r.encoding                                 #獲取網頁編碼
'utf-8'
>>> r.text                                     #獲取響應網頁的內容
'<!--STATUS OK--&gt...

為URL傳遞引數

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print r.text

超時

你可以告訴requests在經過以 timeout 引數設定的秒數時間之後停止等待響應:

>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
  File "", line 1, in 
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)

代理

如果需要使用代理,你可以通過為任意請求方法提供 proxies 引數來配置單個請求:

import requests

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

錯誤與異常

遇到網路問題(如:DNS查詢失敗、拒絕連線等)時,Requests會丟擲一個 ConnectionError 異常。
遇到罕見的無效HTTP響應時,Requests則會丟擲一個 HTTPError 異常。
若請求超時,則丟擲一個 Timeout 異常。
若請求超過了設定的最大重定向次數,則會丟擲一個 TooManyRedirects 異常。
所有Requests顯式丟擲的異常都繼承自 requests.exceptions.RequestException 。

更多介紹可參考官方文件

整理自網路

svoid
2015-03-14

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29733787/viewspace-1460107/,如需轉載,請註明出處,否則將追究法律責任。

相關文章