11.Python-第三方庫requests詳解(三)
阿新 • • 發佈:2017-09-25
raise upload int exce strong gbk auth 並且 exc
Response對象
使用requests方法後,會返回一個response對象,其存儲了服務器響應的內容,如上實例中已經提到的 r.text、r.status_code……
獲取文本方式的響應體實例:當你訪問 r.text 之時,會使用其響應的文本編碼進行解碼,並且你可以修改其編碼讓 r.text 使用自定義的編碼進行解碼。
r = requests.get(‘http://www.itwhy.org‘) print(r.text, ‘\n{}\n‘.format(‘*‘*79), r.encoding) r.encoding = ‘GBK‘ print(r.text, ‘\n{}\n‘.format(‘*‘*79), r.encoding)
其他響應
r.status_code #響應狀態碼
r.raw #返回原始響應體,也就是 urllib 的 response 對象,使用 r.raw.read() 讀取
r.content #字節方式的響應體,會自動為你解碼 gzip 和 deflate 壓縮
r.text #字符串方式的響應體,會自動根據響應頭部的字符編碼進行解碼
r.headers #以字典對象存儲服務器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回None
#*特殊方法*#
r.json() #Requests中內置的JSON解碼器
r.raise_for_status() #失敗請求(非200響應)拋出異常
案例一:
1 url = ‘http://ip.taobao.com/service/getIpInfo.php‘ #這是淘寶IP地址的一個API 2 data = { 3 ‘ip‘:‘8.8.8.8‘ 4 } #這裏構建一個數據字典 5 r = requests.get(url,params=data) #傳入字典數據給API調用 6 print r.url #打印對應的屬性 7 8 try: 9 r = requests.get(url,params=data) 10 r.raise_for_status() 11 except requests.RequestException as e:12 print e 13 else: 14 result = r.json() 15 print type(result),result
把字符串當文件上傳
1 url = ‘http://127.0.0.1:5000/upload‘ 2 files = {‘file‘:(‘test.txt‘,b‘Hello Requests.‘)} #將字符串直接當文件傳入 3 4 r = requests.post(url,file=files) 5 print r.text
身份驗證
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()
另一種非常流行的HTTP身份認證形式是摘要式身份認證,Requests對它的支持也是開箱即可用的:
1 requests.get(url,auth=HTTPDigestAuth(‘user‘,‘pass‘))
Cookies與會話對象
如果某個響應中包含一些Cookie,你可以快速訪問它們:
1 r = requests.get(‘http://www.google.com.hk/‘) 2 print r.cookies[‘NID‘] 3 print tuple(r.cookies)
要想發送你的cookies到服務器,可以使用 cookies 參數:
1 import requests 2 3 url = ‘http://httpbin.org/cookies‘ 4 cookies = {‘testCookies_1‘: ‘Hello_Python3‘, ‘testCookies_2‘: ‘Hello_Requests‘} 5 # 在Cookie Version 0中規定空格、方括號、圓括號、等於號、逗號、雙引號、斜杠、問號、@,冒號,分號等特殊符號都不能作為Cookie的內容。 6 r = requests.get(url, cookies=cookies) 7 print(r.json())
11.Python-第三方庫requests詳解(三)