python第三方庫requests簡單介紹
阿新 • • 發佈:2018-10-31
一、傳送請求與傳遞引數
簡單demo:
import requests r = requests.get(url='http://www.itwhy.org') # 最基本的GET請求 print(r.status_code) # 獲取返回狀態 r = requests.get(url='http://dict.baidu.com/s', params={'wd':'python'}) #帶引數的GET請求 print(r.url) print(r.text) #列印解碼後的返回資料
1、帶引數的請求
import requests requests.get('http://www.dict.baidu.com/s', params={'wd': 'python'}) #GET引數例項 requests.post('http://www.itwhy.org/wp-comments-post.php', data={'comment': '測試POST'}) #POST引數例項
2、post傳送json資料:
import requests import json r = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'})) print(r.json())
3、定製header:
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)
二、response物件
使用requests方法後,會返回一個response物件,其儲存了伺服器響應的內容,如上例項中已經提到的 r.text、r.status_code……
獲取文字方式的響應體例項:當你訪問 r.text 之時,會使用其響應的文字編碼進行解碼,並且你可以修改其編碼讓 r.text 使用自定義的編碼進行解碼
響應:
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響應)丟擲異常
demo:
import requests URL = 'http://ip.taobao.com/service/getIpInfo.php' # 淘寶IP地址庫API try: r = requests.get(URL, params={'ip': '8.8.8.8'}, timeout=1) r.raise_for_status() # 如果響應狀態碼不是 200,就主動丟擲異常 except requests.RequestException as e: print(e) else: result = r.json() print(type(result), result, sep='\n') # 結果: # <class 'dict'> # {'code': 0, 'data': {'ip': '8.8.8.8', 'country': '美國', 'area': '', 'region': 'XX', 'city': 'XX', 'county': 'XX', 'isp': 'Level3', 'country_id': 'US', 'area_id': '', 'region_id': 'xx', 'city_id': 'xx', 'county_id': 'xx', 'isp_id': '200053'}}
三、上傳檔案
1、上傳檔案
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)
2、可以把字串當著檔案進行上傳:
import requests url = 'http://127.0.0.1:5000/upload' files = {'file': ('test.txt', b'Hello Requests.')} #必需顯式的設定檔名 r = requests.post(url, files=files) print(r.text)
四、身份驗證
1、基本身份認證(HTTP Basic Auth):
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())
2、非常流行的HTTP身份認證形式是摘要式身份認證,Requests對它的支援也是開箱即可用的:
requests.get(URL, auth=HTTPDigestAuth('user', 'pass'))
五、Cookies與會話物件
1、如果某個響應中包含一些Cookie,你可以快速訪問它們:
import requests r = requests.get('http://www.google.com.hk/') print(r.cookies['NID']) print(tuple(r.cookies))
2、要想傳送你的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())
六、超時與異常
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)
備註:本文采集於:https://www.cnblogs.com/mrchige/p/6409444.html ,僅用於記錄筆記學習!