日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

requests库

發布時間:2025/7/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 requests库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:requests優點原理

requests發送請求優點:

1.?無需手動為url添加查詢字符串

2.不需要對post請求進行表單編碼

3.keep-alive和HTTP連接池的功能是完全自動化的

4.帶持久Cookie的會話

5.瀏覽器式的ssl認證

6.自動內容解碼

7.基本、摘要式的身份認證

8.自動解壓

9.unicode相應體

10.https代理支持

11.文件分塊上傳

12.流下載

13.連接超時

14.分塊請求

15.支持。netrc

原理:

requests內部封裝urllib3

?

request上手:

1.發送請求:

request有簡單的api意味著所有http請求類型都是顯而易見。post、put、delete、head、options

例如:http://httpbin.org/post

?

2.傳遞url參數:

requests?允許視同params關鍵字參數,以一個字符串字典來提供參數

如:payload={'key1':"value1", "key2":"value2"}

r = requests.get("http://httpbin.org/get", params=payload)

打印的url會被正確編碼

?

3.響應內容:

1.文本相應內容? ?2.二進制相應內容? 3.json響應內容? 4.原始相應內容

1.text? ? ? ? ? ? ? ? ? ?2.?content? ? ? ? ? ? ? 3.json()? ? ? ? ? 4.raw? ? (確定設置了stram=true)

?

4.定制請求頭:

Requests不會給予定制header的具體情況改變自己的行為。只不過在最后的請求中,所有的header信息會被傳遞。

所有的header值必須是string、bytesting或者unicode。盡管傳遞unicode?header也是允許的,但不建議這樣使用。

?

5.更加復雜的post請求:

1.自動編碼表單格式:

如: r = requests.post('https://httpbin.org/post', data=payload)

自動編碼為表單格式:

{

““””

”form“ : {

“key1”:"value1"

"key2":"value2"

}

”“””

}

或是元祖類型

>>> payload = (('key1', 'value1'), ('key1', 'value2')) >>> r = requests.post('http://httpbin.org/post', data=payload) >>> print(r.text) { ... "form": { "key1": [ "value1", "value2" ] }, ... }

很多時候你想要發送的數據并非編碼為表單形式的。如果你傳遞一個?string?而不是一個?dict,那么數據會被直接發布出去。

例如,Github API v3 接受編碼為 JSON 的 POST/PATCH 數據:

>>> import json>>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'} >>> r = requests.post(url, data=json.dumps(payload))

此處除了可以自行對?dict?進行編碼,你還可以使用?json?參數直接傳遞,然后它就會被自動編碼。這是 2.4.2 版的新加功能:

>>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'} >>> r = requests.post(url, json=payload)


6.POST一個多部分編碼(Multipart-Encoded)的文件

Requests 使得上傳多部分編碼文件變得很簡單:

>>> url = 'http://httpbin.org/post' >>> files = {'file': open('report.xls', 'rb')} >>> r = requests.post(url, files=files) >>> r.text { ... "files": { "file": "<censored...binary...data>" }, ... }

你可以顯式地設置文件名,文件類型和請求頭:

>>> url = 'http://httpbin.org/post' >>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})} >>> r = requests.post(url, files=files) >>> r.text { ... "files": { "file": "<censored...binary...data>" }, ... }

如果你想,你也可以發送作為文件來接收的字符串:

>>> url = 'http://httpbin.org/post' >>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')} >>> r = requests.post(url, files=files) >>> r.text { ... "files": { "file": "some,data,to,send\\nanother,row,to,send\\n" }, ... }



7.響應狀態碼

我們可以檢測響應狀態碼:

>>> r = requests.get('http://httpbin.org/get') >>> r.status_code 200

為方便引用,Requests還附帶了一個內置的狀態碼查詢對象:

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

如果發送了一個錯誤請求(一個 4XX 客戶端錯誤,或者 5XX 服務器錯誤響應),我們可以通過?Response.raise_for_status()?來拋出異常:

>>> bad_r = requests.get('http://httpbin.org/status/404') >>> bad_r.status_code 404 >>> bad_r.raise_for_status() Traceback (most recent call last): File "requests/models.py", line 832, in raise_for_status raise http_error requests.exceptions.HTTPError: 404 Client Error

但是,由于我們的例子中?r?的?status_code?是?200?,當我們調用?raise_for_status()時,得到的是:

>>> r.raise_for_status() None ?

8.響應頭

響應頭大小寫不敏感,語法匹配

r.headers['content-type']獲取響應頭中的content-type信息

?

9.cookie

1.響應中包含一些cookie,可以快速訪問使用,發送你的cookies到服務器,可以使用cookies參數

url = 'http://example.com/some/cookie/setting/url' >>> r = requests.get(url) >>> r.cookies['example_cookie_name']

url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are = 'working')

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

2.cookie的返回對象為RequestsCookieJar ,它的行為和字典類似,但界面更為完整,適跨域名跨路徑使用。你還可以吧Cookie Jar?傳到Request中:

>>> jar = requests.cookies.RequestsCookieJar() >>> jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies') >>> jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere') >>> url = 'http://httpbin.org/cookies' >>> r = requests.get(url, cookies=jar) >>> r.text '{"cookies": {"tasty_cookie": "yum"}}'

?

重定向與請求歷史?:

Response.history?是一個 Response?對象的列表,?為了完成請求而創建了這些對象。這個對象按照從老到最近的請求進行排序。

使用GET、OPTION/POST/PUT/PATCH或者DELETE,?那么你可以通過allow_redirects參數急用重定向處理:

r = requests.get('http://github.com', allow_redirects = Flase)

r.status_code

輸出301錯誤,域名錯誤,沒有重定向到下一個網址

r.history

輸出為空列表

使用HEAD,你也可以啟用重定向:

r? = requests.head('http://github.com', allow_redirets = True)

r.url

輸出: 'http://github.com/'

r.history

[<Response[301]>]

?

超時:

告訴requests在經過以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)

如圖控制臺會顯示Traceback (most recent call last)? 回溯(最近一次調用)

也就是說,在timeout秒內沒有從基礎套接字接收到任何字節的數據時

?

?

錯誤與異常:

遇到網絡問題(如: DNS查詢失敗、拒絕連接等)時, Requests會拋出一個ConnectionError異常。

如果HTTP請求返回了不成功的狀態碼,Requests.raise_for_status()會拋出一個HTTPError異常。

若請求超時,?則拋出一個Timeout異常。

若請求超過了設定的最大重定向次數,?則會拋出一個TooManyRedirects異常。

所有Requests顯示拋出的一行都繼承自requests.exceptions.RequestException。

?

?

?

?

轉載于:https://www.cnblogs.com/unameisxl/p/8669648.html

總結

以上是生活随笔為你收集整理的requests库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。