1. 程式人生 > 實用技巧 >python中requests庫的post請求 4種類型引數

python中requests庫的post請求 4種類型引數

用python來驗證介面正確性,主要流程有4步:

1 設定url

2 設定訊息頭

3 設定訊息體

4 獲取響應

5 解析相應

6 驗證資料

Content-Type的格式有四種:分別是application/x-www-form-urlencoded(這也是預設格式)、application/json、text/xml以及multipart/form-data格式。

(一)application/x-www-form-urlencoded資料格式

請看程式碼:

datas = {'parameter1':'12345','parameter2':'23456'}
r = requests.post('http://example.com',data=datas)
print(r.content)
print(r.status_code)

解說:Reqeusts支援以application/x-www-form-urlencoded資料格式傳送post請求,只需要將請求的引數構造成一個字典,然後傳給requests.post()的data引數即可。

(二)application/json資料格式

application/json格式的請求頭是指用來告訴服務端post過去的訊息主體是序列化後的 JSON 字串。

請看帶程式碼:

url = 'http://www.example/post'
s = json.dumps({'key1': 'value1', 'key2': 'value2'})
r = requests.post(url, data=s)
print (r.text)

區別:

這裡我們可以發現Requests模擬post請求時,請求頭格式為application/x-www-form-urlencoded與application/json的主要差別在於請求主體的構造格式(前者是鍵值對,後者是JSON串),前者直接用字典傳入,後者用json.dumps()函式將字典轉為JSON串即可。 (三)text/xml資料格式 請看程式碼:
xml = """my xml"""
headers = {'Content-Type': 'application/xml'}
requests.post('http://www.example.com', data=xml, headers=headers)

或者把xml作為一個檔案來傳輸:
import requests

def request_ws(request):
with open(archivo_request,"r") as archivo:
    request_data = archivo.read()

target_url = "http://127.0.0.1:8000/?wsdl"

headers = {'Content-type':'text/xml'}

data_response = requests.post(target_url, data=request_data, headers=headers)

(四)multipart/form-data資料格式
除了傳統的application/x-www-form-urlencoded表單,我們另一個經常用到的是上傳檔案用的表單,這種表單的型別為multipart/form-data,
multipart/form-data主要用於檔案上傳,當我們使用它時,必須讓 form表單的enctype 等於 multipart/form-data
直接來看一個請求示例,主要:
請看程式碼(
實現上傳本地的test.txt檔案):

import requests
files = {"file": open("C:/Users/Administrator/Desktop/test.txt", "rb")}
r = requests.post("http://httpbin.org/post", files=files)
print(r.text)
具體請看實際例子:

import requests
import json
# 設定URL
url = "http://demo.9meikf.cn/usystem/auto/getAnswer.do"
# 設定訊息頭
headers = {
    "Cookie":"JSESSIONID=EA01FF2B025861F39E29712C97F7DF69;CASTGC=TGT-136-bLQMf0CAikK4BGaydOfIeKd6tWpZQEznJ2ZWdcVl9ofI4LiaQb-cas01.example.org",
    "Content-Type":"application/json"
    }
# 設定訊息體
data = {"companyId":"48622",
        "nodeId":6,
        "question":"不需要",
        "templateId":"c6f5ad67fc2c11e8a11800163e086942"}
# 獲取相應
response=requests.post(url,headers=headers,data=json.dumps(data))
print("Status code:",response.status_code)
print(response.text)
# 解析相應
info=response.json()
# 驗證資料
assert str(info['answer'])=='reject'