1. 程式人生 > >11.Python-第三方庫requests詳解(三)

11.Python-第三方庫requests詳解(三)

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,bHello 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詳解(三)