python之requests的使用方法

兩個重要的方法:get和post

requests.get()
語法
r = requests.get(url, params={}, headers={}, cookies={}, allow_redirects=True, timeout=float, proxies={}, verify=True)

參數說明

注:若verify=False,會有警告,可 import requests.packages.urllib3 requests.packages.urllib3.disable_warnings();

 

requests.post()
語法
r = requests.post(url, data={}, headers={}, cookies={}, json=”, files={}, allow_redirects=True, timeout=float, proxies={}, verify=True)

參數說明

請求響應體說明

requests.utils中的常用方法

requests.utils.get_encodings_from_content(r.content): 返回原始數據編碼;

requests.utils.dict_from_cookiejar(r.cookies): 將CookieJar轉爲字典;

requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): 將字典轉爲CookieJar;

問題與解決方案

開啓會話,保持cookie

s = requests.Session()             # 開啓會話
cookies = json.loads(result)                     # phantomjs獲取的cookies json對象
cookie = {}
for k in cookies:
    cookie[k['name']] = k['value']               # 獲取每個cookie中的name和value
s.cookies = requests.utils.cookiejar_from_dict(cookie, cookiejar=None, overwrite=True)       # 將字典cookie轉換爲cookieJar,然後放在會話中
s.get(url.....)                    # 此時每個請求都會帶上cookie
s.cookies: cookiejar對象;
s.cookies.get_dict(): dict,cookie鍵值對;
 

設置超時和最大嘗試次數

timeout是get/post等的參數, 單位秒.
max_retries需要構建一個HTTPAdapter並設置其max_retries, 最後將該Adaptor加載給requests的Session對象. mount時的鏈接是前端最大匹配, 使用”http://”和”https://”可以分別對應兩大類網址. 也可以更具體針對某網站.

requestsSession = requests.Session()                                # 開啓會話
requestsAdapterA = requests.adapters.HTTPAdapter(max_retries=3)     # 掛載適配器
requestsSession.mount('http://', requestsAdapterA)                  # 此會話中適用所有http請求
r = requestsSession.get(url , timeout=20)                           # 打開相應url並設置超時

注:max_retries適用於超時,並不適用於訪問出錯。
注:在會話中,請求url1所返回的cookies會自動保存,當訪問url2的時候也會被自動帶入。

上傳文件

url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
# files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}   # 顯示的設置文件名、文件類型、文件頭
r = requests.post(url, files=files)
r.text

流式上傳

with open('xxx.txt') as fp:
    requests.post('http://some.url/api', data=fp)

文件下載

from PIL import Image
from io import BytesIO

url = 'http://xxx.jpg'
r = requests.get(url)
i = Image.open(BytesIO(r.content))
i.save('local.jpg')

注意事項

get()或post()中的headers、cookies設置的值,將合併到Requests中去,所以傳入 {} 也沒關係;
圖片、pdf等打開方式應該爲 ‘wb’,寫入的內容應該是 r.content;
若是響應頭Content-Type中不含charset,則 r.text 默認爲 ‘ISO-8859-1’;
若是timeout沒有顯示的設置,理論上requests請求永不超時。
在session中刪除一個參數,直接設置其值爲None;

好文:https://blog.csdn.net/lihao21/article/details/51857385

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章