Python中get、post請求詳解(HTTP請求頭、狀態碼)

Y4tacker發表於2020-03-09


我們知道通常瀏覽器支援get與post兩種常見的請求方式,那麼在python當中如何具體實現呢?

GET

首先是get,我們知道get指令比較簡單,通常便是在瀏覽器視窗位址列中使用?xx=xxxxx
那麼在python當中如何實現這個過程呢?
首先我們需要了解requests模組

1)匯入模組

import requests

2)傳送請求

import requests

r = requests.get('https://www.baidu.com')       # 最基本的不帶引數的get請求
re = requests.get(url='https://www.baidu.com/s', params={'wd':'python'})      # 帶引數的get請求

這便實現了一個?get請求

3)響應請求

r.encoding                       #獲取當前的編碼
r.encoding = 'utf-8'             #設定編碼
r.text                           #以encoding解析返回內容。字串方式的響應體,會自動根據響應頭部的字元編碼進行解碼。
r.content                        #以位元組形式(二進位制)返回。位元組方式的響應體,會自動為你解碼 gzip 和 deflate 壓縮。

r.headers                        #以字典物件儲存伺服器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回None
r.request.headers				# 前提是你要在引數裡面寫入了headers
r.status_code                     #響應狀態碼
r.raw                             #返回原始響應體,也就是 urllib 的 response 物件,使用 r.raw.read()   
r.ok                              # 檢視r.ok的布林值便可以知道是否登陸成功
 #*特殊方法*#
r.json()                         #Requests中內建的JSON解碼器,以json形式返回,前提返回的內容確保是json格式的,不然解析出錯會拋異常
r.raise_for_status()             #失敗請求(非200響應)丟擲異常

POST

與get類似這裡多說一點就是可以傳送json請求

import requests
import json
  
r = requests.post('https://www.baidu.com', data=json.dumps({'name': 'value'}))
print(r.json())

這裡再比較下請求頭與響應頭

import requests


headers = {
        'Referer': 'https://www.csdn.net/', 
    }
re = requests.get('http://www.baidu.com')
print(re.headers)
print(re.request.headers)

HTTP請求頭

這裡列舉幾個常見的:

'Referer': 當前網頁從哪裡跳轉來
'User-Agent': 瀏覽器代理資訊,
'Accept-encoding': 瀏覽器接收的編碼,
'Location': 跳轉到哪裡,通常是3XX請求

HTTP響應狀態碼

1XX---資訊提示
2XX---成功
3XX---重定向
4XX---客戶端錯誤
5XX---服務端錯誤

會話保持

通常我們想要在請求一次後保持會話這時候我們就需要使用seesion
se = requests.Session()
se.get()
se.post()

相關文章