網站首頁 編程語言 正文
使用requests POST提交一個鍵多個值
問題
在使用POST提交數據時,想實現下面這種情況:
requests.post(url, data={'interests':'football','interests':'basketball'})
用這種方式肯定是錯誤的,因為字典中的key是唯一的。
解決方法
使用元組列表
代碼如下:
import requests url = 'http://httpbin.org/post' r = requests.post(url, data=[('interests', 'football'), ('interests', 'basketball')]) r.json()['form']
requests庫的post請求4種類型參數
用python來驗證接口正確性,主要流程有:
- 1 設置url
- 2 設置消息頭
- 3 設置消息體
- 4 獲取響應
- 5 解析相應
- 6 驗證數據
Content-Type的格式有四種:分別是application/x-www-form-urlencoded(這也是默認格式)、application/json、text/xml以及multipart/form-data格式。
1、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參數即可。
2、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串即可。
3、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)
4、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'
原文鏈接:https://blog.csdn.net/win_turn/article/details/54849734
相關推薦
- 2022-04-10 python?tkinter實現簡單計算器功能_python
- 2022-07-11 SOC驗證環境的啟動方式
- 2022-03-15 ant design: Instance created by `useForm` is not c
- 2022-06-30 python神經網絡MobileNetV2模型的復現詳解_python
- 2023-01-05 Kotlin注解與反射的定義及創建使用詳解_Android
- 2022-07-14 android實現多點觸摸效果_Android
- 2022-03-07 Android?permission?denied原因歸納和解決辦法_Android
- 2022-11-30 jQuery中隱藏元素的hide方法及說明_jquery
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支