Requests庫介紹


 

Requests 是用Python語言編寫,基於 urllib,采用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語為中心開發的,所以它比 urllib 更加 Pythoner。更重要的一點是它支持 Python3 哦!

  • Beautiful is better than ugly.(美麗優於丑陋)
  • Explicit is better than implicit.(清楚優於含糊)
  • Simple is better than complex.(簡單優於復雜)
  • Complex is better than complicated.(復雜優於繁瑣)
  • Readability counts.(重要的是可讀性)

 

requests庫常用的7種方法:

requests.requests()

requests.get(‘https://github.com/timeline.json’) #GET請求

requests.post(“http://httpbin.org/post”) #POST請求

requests.put(“http://httpbin.org/put”) #PUT請求(提交修改全部的數據)

requests.delete(“http://httpbin.org/delete”) #DELETE請求

requests.head(“http://httpbin.org/get”) #HEAD請求

requests.patch(“http://httpbin.org/get”) #PATCH請求(提交修改部分數據)

剩下六種方法都是由requests()方法實現的,因此我們也可以說requests()方法是最基本的

在網絡上,對服務器數據進行修改是比較困難的,在實際中get()方法是最為常用的方法

1.requests()方法:

requests.requests(method, url, **kwargs)

method:請求方式:GET, PUT,POST,HEAD, PATCH, delete, OPTIONS7種方式

url:網絡鏈接

**kwargs: (13個可選參數)(下面演示這些參數如何使用)

             params: 字典或者字節序列,作為參數增加到url中

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get("http://httpbin.org/get", params=payload)
通過打印輸出該URL,你能看到URL已被正確編碼:
>>> print r.url
u'http://httpbin.org/get?key2=value2&key1=value1'

 

             json: JSON格式的數據,作為requests的內容

>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

  

             headers: 字典,HTTP定制頭

             data: 是第二個控制參數,向服務器提交數據

import requests
import json
 
data = {'some': 'data'}
headers = {'content-type': 'application/json',
           'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
 
r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers)
print(r.text)

  

 

             cookies: 字典或CookieJar, Requests中的cookie

如果某個響應中包含一些Cookie,你可以快速訪問它們:

import requests
 
r = requests.get('http://www.google.com.hk/')
print(r.cookies['NID'])
print(tuple(r.cookies))

要想發送你的cookies到服務器,可以使用 cookies 參數:

import requests
 
url = 'http://httpbin.org/cookies'
cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Requests'}
# 在Cookie Version 0中規定空格、方括號、圓括號、等於號、逗號、雙引號、斜杠、問號、@,冒號,分號等特殊符號都不能作為Cookie的內容。
r = requests.get(url, cookies=cookies)
print(r.json())

  

             auth: 元組,支持HTTP認證功能

import requests
from requests.auth import HTTPBasicAuth
 
r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd'))
# r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd'))    # 簡寫
print(r.json())

  

             files: 字典類型,傳輸文件

import requests
 
url = 'http://127.0.0.1:5000/upload'
files = {'file': open('/home/lyb/sjzl.mpg', 'rb')}
#files = {'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))}     #顯式的設置文件名
 
r = requests.post(url, files=files)
print(r.text)

  

             timeout: 設置的超時時間,秒為單位

>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
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://www.zhidaow.com", proxies=proxies)

  

如果代理需要賬戶和密碼,則需這樣:

proxies = {
    "http": "http://user:pass@10.10.1.10:3128/",
}

  

             allow_redirects: True/False,默認為True, 重定向開關

             stream: True/False,默認為True,獲取內容立即下載開關

             verity: True/False,默認為True, 認證SSL證書

             cert: 本地SSL證書路徑   

2.get()方法:

requests.get(url, params=None, **kwargs)

url: 擬獲取頁面的url鏈接

params: url中的額外參數,字典或字節流,可選擇

**kwargs:12個控制訪問的參數,就是requests中除params參數

 3.head()方法

requests.head(url, **kwargs)

url: 擬獲取頁面的url鏈接

**kwargs:13個控制訪問的參數

 4.post()方法

requests.post(url,  data=None, json=None, **kwargs)

url: 擬獲取頁面的url鏈接

data: 字典,字節序列或文件,Requests的內容

json: JSON格式的數據,Requests的內容

**kwargs:11個控制訪問的參數

 5.put()方法

requests.put(url,  data=None, **kwargs)

url: 擬獲取頁面的url鏈接

data: 字典,字節序列或文件,Requests的內容

**kwargs:12個控制訪問的參數

 6.patch()方法

requests.patch(url,  data=None, **kwargs)

url: 擬獲取頁面的url鏈接

data: 字典,字節序列或文件,Requests的內容

**kwargs:12個控制訪問的參數

 7.delete()方法

requests.delete(url, **kwargs)

url: 擬刪除頁面的url鏈接

**kwargs:13個控制訪問的參數

 

 

 

Response對象

使用requests方法后,會返回一個response對象,其存儲了服務器響應的內容,

常用屬性:

r.status_code #HTTP響應狀態碼,200表示響應成功,404表示失敗

r.content #HTTP響應內容的二進制形式

r.text #字符串方式的響應體,

r.headers #以字典對象存儲服務器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回None

(要注意區分r.headers,與前面的headers參數字段,前者只是Response對象的一個屬性,后者是傳遞的參數)

r.encoding#從HTTP頭header中提取響應內容的編碼方式(這個編碼方式不一定存在)

r.apparent_encoding#從內容中分析出響應內容的編碼方式(這個編碼方式是絕對正確的)

r.raw #返回原始響應體,也就是 urllib 的 response 對象,使用 r.raw.read() 讀取

在這里有一個比較特殊的屬性: r.request.headers可以查看HTTP請求的頭部,注意區分r.headers

 

常用方法:

r.raise_for_status() #失敗請求(非200響應)拋出requests.HTTPError異常

 

Requests庫的異常:

requests.ConnectionError: 網絡連接錯誤異常,如DNS查詢失敗,拒接連接等

requests.HTTPError: HTTP錯誤異常

requests.URLRequired: URL缺失異常

requests.TooManyRedirects: 超過最大重定向次數,產生的重定向異常

requests.ConnectTimeout: 遠程連接服務器異常超時

requests.Timeout: 請求URL超時,產生的超時異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM