python中requests庫的初級使用

2021-08-21 10:12:07 字數 4214 閱讀 6009

基於2.19.1版本的requests庫,參考官方文件

首先是安裝

pip install requests
匯入使用

import requests
1. 發起請求

request.請求方式(請求引數)

例如:

response = requests.get('', params=)

response = requests.post('', data=)

請求攜帶自己的cookie

>>> url = ''

>>> cookies = dict(cookies_are='working')

>>> r = requests.get(url, cookies=cookies)

>>> r.text

'}'

method: 請求方式

url: 請求的url位址

params: url查詢字串,型別要求字典或bytes

data: 請求體,型別要求字典、元組列表、bytes和檔案物件。

json:請求體,型別要求python資料型別被json序列化後

headers: 請求頭,型別要求 http請求頭字典

cookies: 型別要求字典或cookiejar物件

files: 型別要求字典

auth:身份認證,型別要求元組auth=("user", "pass")

timeout: 請求超時, 單位秒, float or tuple

allow_redirects: 重定向, 布林型

proxies: **, 字典型別

verify: 是否適用ca認證,布林型

cert:認證證書, 型別為字串和元組,字串證書.pem檔案的路徑, 元組('cert', 'key')

2.獲取響應

response.方法名

例如:

response.text  # 自動解碼響應內容

response.encoding # 檢視當前使用的解碼方式,可以通過response.encoding='utf-8'設定

response.content # 二進位制響應內容

response.json() # 響應資料為json的內容

response.raw # 原始響應物件, 請求引數需設定stream=true

response.raw.read()

上述例子仍有侷限性,response.raw.read()一般不用,讀取響應的流式資料到檔案一般採用以下方法

with open(filename, 'wb') as fd:

for chunk in r.iter_content(chunk_size=128):

fd.write(chunk)

響應的狀態碼

response.status_code  # 獲取當前響應的狀態碼

# 請求附帶內建狀態碼,可作為對比

>>> r.status_code == requests.codes.ok

true

響應頭

response.headers

# 任意大寫獲取響應頭

>>> r.headers['content-type']

>>> r.headers.get('content-type')

cookie

response.cookies  # 響應的cookie

response.request._cookies # 請求的cookie,

# 利用 requests.utils.dict_from_cookiejar 轉成字典

cook_dict = requests.utils.dict_from_cookiejar(request_cookie)

3.自定義headers

在請求引數headers傳入

例如:

但,我們自己設定的headers優先順序比較低:

如果在主機外重定向,將刪除headers;

**含有headers將覆蓋等...

4. 複雜的post請求

# 1 傳遞字典,會自動轉化為表單提交

payload =

r = requests.post("", data=payload)

print(r.text)

, ...

}# 2 還可以傳遞元組列表,乙個鍵對應多值及其適用

payload = (('key1', 'value1'), ('key1', 'value2'))

r = requests.post('', data=payload)

print(r.text)

, ...

}payload =

r = requests.post("", data=payload)

print(r.text)

, ...

}# 2 還可以傳遞元組列表,乙個鍵對應多值及其適用

payload = (('key1', 'value1'), ('key1', 'value2'))

r = requests.post('', data=payload)

print(r.text)

, ...

}

直接傳遞json引數的post請求

# 轉為json傳遞

payload =

r = requests.post(url,data=json.dumps(payload))

# 直接傳遞,系統自己轉化為json資料

r = requests.post(url, json=payload)data=json.dumps(payload))

# 直接傳遞,系統自己轉化為json資料

r = requests.post(url, json=payload)

上傳檔案的post請求

files =   # 以二進位制模式開啟檔案,避免不必要的錯誤

r = requests.post(url,files=files)files=files)

5.重定向和歷史和超時

可以通過response.history檢視請求的所有重定向,返回的是列表,順序為響應的順序

# http請求被重定向https

>>> r = requests.get('')

>>> r.url

''>>> r.status_code

200>>> r.history

重定向的設定,只要在請求中設定引數allow_redirects=true  or  false

設定請求超時,只要在請求中設定引數timeout=seconds, 程式將在secodes秒後沒有響應而引發異常,如果沒設定,則不限時

6 異常和丟擲

丟擲響應錯誤

response.raise_for_status()  # 如果響應200,結果為nonenone
response.raise_for_status()  響應狀態碼不是200是會丟擲異常

網路問題:dns、拒絕連線等會丟擲connectionerror

如果請求超時,timeout則會引發異常。

如果請求超過配置的最大重定向數,toomanyredirects則會引發異常。

請求顯式引發的所有異常都繼承自requests.exceptions.requestexception

python中的requests模組

requests是用python實現的第三方http庫。post介面 結果 還有乙個簡單的示例 更新 傳送請求與傳遞引數 帶引數的get請求 impor requests r requests.get 最基本的get請求 print r.status code 獲取返回狀態碼 print r.url...

python中requests的安裝

本文主要說明了在自帶有pip的python中如何安裝requests。pip在大部分2.7或者3以上的python都已經自帶了。那麼如何判斷是否自帶有pip 在命令列 win r 中輸入 python m pip version 出現如下圖的提示,則表示自帶有pip 準備好pip之後,如果pytho...

python中requests小技巧

關於 python requests 在使用中,總結了一些小技巧把,記錄下。1 保持請求之間的cookies,我們可以這樣做。2 請求時,會加上headers,一般我們會寫成這樣 唯一不便的是之後的 每次都需要這麼寫,顯得臃腫,所以我們可以這樣 3 預設requests請求失敗後不會重試,但是我們跑...