首頁/ 科技/ 正文

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

目錄:

1。3。1。1傳送請求

2。3。1。2傳遞URL引數3。3。1。3響應內容

4。3。1。4 JSON響應內容5。3。1。5定製請求頭

6。3。1。6響應狀態碼

7。3。1。7響應頭

8。3。1。8 Cookie

9。3。1。9錯誤與異常

所有操作都必須先匯入requests模組:

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

3。1。1傳送請求

傳送get請求

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

requests。get方法會返回一個Response的物件r,就是網站的響應,我們想要獲取的資料就包含在這個物件中

傳送post請求

post方法會返回一個Response的物件r,就是網站的響應,我們想要獲取的資料就包含在這個物件中

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

其它方法的請求

其它方法的請求格式也相同

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

3。1。2傳遞URL引數

在get請求中傳遞引數

基本格式

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

在post請求中傳遞引數

基本格式

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

get方法的傳遞資料的引數為params,post方法傳遞資料的引數為data

3。1。3響應內容

以再次以 GitHub 時間線為例,r。text就是以文字方式讀取響應正文

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

還可以獲取響應正文的編碼,並改變其編碼

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

還可以用r。content,以二進位制方式讀取響應正文

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

r。text 存的是r。content 編碼後的字串

r。content中間存的是位元組碼

一般來說r。text直接用比較方便,返回的是字串,但是有時候會解析不正常,導致返回的是一堆亂碼。這時需要用r。content。decode(‘utf-8’),使其正常顯示。

總的來說。text是現成的字串,。content還要編碼,但是。text不是所有時候顯示都正常(需要用。content。decode()進行手動編碼)

3。1。4 JSON響應內容

當返回的響應正文是一個JSON資料,可以使用Requests內建的JSON解碼器進行處理

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

如果 JSON 解碼失敗, r。json()就會丟擲一個異常。例如,響應內容是401(Unauthorized),嘗試訪問r。json()將會丟擲 ValueError: No JSON object could be decoded 異常。

需要注意的是,成功呼叫 r。json()並不意味著響應的成功。有的伺服器會在失敗的響應中包含一個JSON 物件(比如 HTTP 500的錯誤細節)。這種 JSON 會被解碼返回。要檢查請求是否成功,請使用 r。raise_for_status()或者檢查 r。status_code 是否和你的期望相同

3。1。5定製請求頭

想為請求新增 HTTP 頭部,只要簡單地傳遞一個 dict 給 headers 引數就可以了。例如,在前一個示例中我們沒有指定 content-type

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

注意:定製 header 的優先順序低於某些特定的資訊源,例如:

如果在。netrc 中設定了使用者認證資訊,使用 headers=設定的授權就不會生效。而如果設定了

auth=引數,。netrc 的設定就無效了。

如果被重定向到別的主機,授權 header 就會被刪除。代理授權 header 會被 URL 中提供的代理身份覆蓋掉。

在我們能判斷內容長度的情況下,header 的 Content-Length 會被改寫。

更進一步講,Requests 不會基於定製header 的具體情況改變自己的行為。只不過在最後的請求中,所有的 header 資訊都會被傳遞進去

注意:所有的 header 值必須是 string、bytestring 或者 unicode。儘管傳遞 unicode header 也是允許的,但不建議這樣做

3。1。6響應狀態碼

可以透過r。status_code來獲取響應狀態碼

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

Requests還附帶了一個內建的狀態碼查詢物件

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

如果傳送了一個錯誤請求(一個4XX 客戶端錯誤,或者5XX 伺服器錯誤響應),我們可以透過

Response。raise_for_status()來丟擲異常

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

3。1。7響應頭

一個 Python 字典形式展示的伺服器響應頭

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

我們可以使用任意大寫形式來訪問這些響應頭欄位

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

還有一個特殊點,那就是伺服器可以多次接受同一 header,每次都使用不同的值。Requests

會將它們合併,這樣它們就可以用一個對映來表示出來,參見 RFC 7230:

A recipient MAY combine multiple header fields with the same field name into one “field- name: field-value” pair, without

changing the semantics of the message, by appending each subsequent field value to the combined field value in order, separated by a comma。

3。1。8 Cookie

什麼是cookie

Cookie 是一些資料,儲存於你電腦上的文字檔案中。

當 web 伺服器向瀏覽器傳送 web 頁面時,在連線關閉後,服務端不會記錄使用者的資訊。

Cookie 的作用就是用於解決“如何記錄客戶端的使用者資訊”:

● 當用戶訪問 web 頁面時,他的名字可以記錄在 cookie 中。

●在使用者下一次訪問該頁面時,可以在 cookie 中讀取使用者訪問記錄。

Cookie 以名/值對形式儲存,如下所示:

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

獲取響應的cookie

在requests模組中,cookie是以字典的形式儲存透過r。cookies[變數名]可以訪問cookie中的變數值

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

可以對cookie進行遍歷

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

傳送cookie到伺服器

要想傳送你的cookies到伺服器,可以使用 cookies 引數

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

【高階統計】網站的響應、傳遞功能與功能,一個例項教你如何做到!

Cookie 的返回物件為 RequestsCookieJar,它的行為和字典類似,但介面更為完整,適合跨域名跨路徑使用。你還可以把 Cookie Jar 傳到 Requests

3。1。9錯誤與異常

遇到網路問題(如:DNS 查詢失敗、拒絕連線等)時,Requests 會丟擲一個 ConnectionError 異常。如果 HTTP 請求返回了不成功的狀態碼, Response。raise_for_status()會丟擲一個 HTTPError 異常。若請求超時,則丟擲一個 Timeout 異常。

若請求超過了設定的最大重定向次數,則會丟擲一個 TooManyRedirects 異常。所有Requests顯式丟擲的異常都繼承自 requests。exceptions。

RequestException 。

相關文章

頂部