requests中post中data=None, json=None兩個參數區別

requests.post() 方法中,datajson 主要用于發送請求體,但它們的作用和格式有所不同。

1. data 參數

  • 用途:用于發送表單數據或原始二進制數據。
  • 格式
    • 可以是 字典(dict)(默認會編碼為 application/x-www-form-urlencoded)。
    • 也可以是 字符串(str)字節(bytes)文件對象

示例:以表單形式發送數據(默認 application/x-www-form-urlencoded

import requestsurl = "https://example.com/api"
data = {"username": "admin", "password": "123456"}response = requests.post(url, data=data)
print(response.request.headers["Content-Type"])  
# 輸出: application/x-www-form-urlencoded

示例:以字符串發送數據

response = requests.post(url, data="username=admin&password=123456")
print(response.request.headers["Content-Type"])  
# 仍然是 application/x-www-form-urlencoded

示例:發送二進制數據

binary_data = b"\x89PNG\r\n\x1a\n..."  # PNG 文件數據
response = requests.post(url, data=binary_data)

2. json 參數

  • 用途:用于直接發送 JSON 格式的數據(application/json)。
  • 格式:應為 JSON 可序列化的 Python 對象dictlist 等)。
  • 自動序列化requests 會自動將其轉換為 JSON 字符串,并自動設置 Content-Type: application/json

示例:發送 JSON 格式的數據

response = requests.post(url, json={"username": "admin", "password": "123456"})
print(response.request.headers["Content-Type"])  
# 輸出: application/json

3. data vs json 區別總結

datajson
傳輸格式application/x-www-form-urlencoded(默認)或 multipart/form-data(如文件上傳)application/json
數據類型dict(默認轉換為 key=value&key2=value2)、字符串、字節dict(自動轉換為 JSON 格式的字符串)
是否自動 JSON 編碼? 不會 自動轉換為 JSON,需要手動 json.dumps()? 自動 轉換為 JSON

4. 什么時候使用 data vs json

? 使用 data

  • 當 API 需要表單提交時(如 application/x-www-form-urlencoded)。
  • 上傳二進制數據(如 bytes、文件對象)。

? 使用 json

  • 當 API 需要 JSON 格式的請求體時(如 REST API)。
  • 與 Flask/Django/FastAPI 這種 JSON API 兼容的后端通信時

示例:如果 API 只接受 JSON,錯誤用法

requests.post(url, data={"username": "admin", "password": "123456"})  # ? 可能會失敗

正確做法:

requests.post(url, json={"username": "admin", "password": "123456"})  # ? 推薦使用 json

或者:

import json
requests.post(url, data=json.dumps({"username": "admin", "password": "123456"}), headers={"Content-Type": "application/json"})  # ? 手動轉換

如果你使用 data 但 API 需要 application/json,服務器可能會解析失敗。所以 如果 API 需要 JSON,就直接用 json=,避免手動 json.dumps()Content-Type 設置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71924.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71924.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71924.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

51c大模型~合集10

我自己的原文哦~ https://blog.51cto.com/whaosoft/11547799 #Llama 3.1 美國太平洋時間 7 月 23 日,Meta 公司發布了其最新的 AI 模型 Llama 3.1,這是一個里程碑時刻。Llama 3.1 的發布讓我們看到了開源 LLM 有與閉源 LLM 一較高下的能力。 Meta …

架構演變 之 超市進化

1. 單機架構 → 小賣部(夫妻店) 場景:一個老板包攬所有工作——進貨、擺貨、收銀、打掃,店里只有一個小倉庫。對應架構:所有功能(數據庫、業務邏輯、頁面)都擠在一臺服務器上。問題&#xff1a…

ubuntu 和 RV1126 交叉編譯Mosqutiio-1.6.9

最近需要交叉編譯mosquitto,遇到一些小問題記錄一下。 1.眾所周知使用它自帶的Makefile編譯的時候,只需要在編譯前,指定它config.mk中的變量:CFLAGS頭文件路徑 和 LDFLAGS庫文件路徑就ok,例子如下: expor…

Photoshop 中如何快速摳圖?

Photoshop 中如何快速摳圖? 摳圖是 Photoshop 中的常見操作,無論是去除背景還是提取特定對象,都需要掌握高效的摳圖技巧。本文將介紹幾種快速摳圖的方法,幫助你輕松完成設計任務。 1. 快速選擇工具(Quick Selection T…

解決 React 中的 Hydration Failed 錯誤

解決 React 中的 Hydration Failed 錯誤 React 的 服務器端渲染(SSR)通過在服務器端生成 HTML 并將其發送給客戶端,幫助提高頁面加載速度和搜索引擎優化(SEO)。然而,在進行 SSR 后,React 需要進…

如何使用postman來測試接口

一、postman的介紹與下載 可參考: https://blog.csdn.net/freeking101/article/details/80774271 二、api獲取網站 阿里云API應用市場 地址:云市場_鏡像市場_軟件商店_建站軟件_服務器軟件_API接口_應用市場 - 阿里云 三、具體測試過程 可模擬瀏覽…

數據庫系統概論(二)數據模型

數據庫系統概論(二)數據模型 數據庫系統概論(二)數據模型前言一、數據建模二、概念模型三、數據模型的三要素四、層次模型五、網狀模型六、關系模型 總結(核心概念速記): 數據庫系統概論&#x…

清華同方國產電腦能改windows嗎_清華同方國產系統改win7教程

清華同方國產電腦能改windows嗎?清華同方國產電腦如果采用的是兆芯kx-6000系列或kx-7000系列以及海光c86 3250 3350 X86架構處理器可以安裝windows。在安裝win7時bios中要關閉“安全啟動”和開啟legacy傳統模式支持,如果是NVME接口的固態硬盤&#xff0c…

安卓Android與iOS設備管理對比:企業選擇指南

目錄 一、管理方式差異 Android Enterprise方案包含三種典型模式: Apple MDM方案主要提供兩種模式: 二、安全防護能力 Android系統特點: 三、應用管理方案 四、設備選擇建議 五、典型場景推薦 需求場景 推薦方案 六、決策建議要點…

再聊 Flutter Riverpod ,注解模式下的 Riverpod 有什么特別之處,還有發展方向

三年前我們通過 《Flutter Riverpod 全面深入解析》 深入理解了 riverpod 的內部實現,而時隔三年之后,如今Riverpod 的主流模式已經是注解,那今天就讓我們來聊聊 riverpod 的注解有什么特殊之處。 前言 在此之前,我們需要先回憶…

前端項目Axios封裝Vue3詳細教程(附源碼)

前端項目Axios封裝Vue3詳細教程(附源碼) 一、引言 在前端項目開發中,HTTP請求是不可或缺的一部分。Axios作為一個基于Promise的HTTP客戶端,因其易用性和豐富的功能而廣受歡迎。在Vue3項目中,合理地封裝Axios不僅可以提…

手寫一個Tomcat

Tomcat 是一個廣泛使用的開源 Java Servlet 容器,用于運行 Java Web 應用程序。雖然 Tomcat 本身功能強大且復雜,但通過手寫一個簡易版的 Tomcat,我們可以更好地理解其核心工作原理。本文將帶你一步步實現一個簡易版的 Tomcat,并深…

在 UniApp 開發的網站中使圖片能夠緩存,不一直刷新

在 UniApp 開發的網站中,要使圖片能夠緩存,不一直刷新,可以考慮以下幾種方法: 1. 使用適當的 HTTP 緩存頭 確保你的服務器在響應圖片時,返回合適的緩存控制 HTTP 頭。以下是一些常用的 HTTP 頭來控制緩存&#xff1a…

Makefile——make工具編譯STM32工程

一、Makefile相關指令 1.1、變量 符號含義替換追加:恒等于 1.2、隱含規則 符號含義%.o任意的.o文件*.o所有的.o文件 1.3、通配符 符號含義$^所有依賴文件$所有目標文件$<所有依賴文件的第一個文件 1.4、編譯器指令常用參數功能說明 符號含義舉例-E預處理&#xff0c;…

深入理解Linux文件系統權限:從基礎到高級應用全解析

1. 什么是文件系統權限&#xff1f;它是如何工作的&#xff1f; 文件權限的本質 想象你的電腦是一個大房子&#xff0c;每個文件和目錄都是房間里的物品。文件系統權限就像是一把鑰匙&#xff0c;決定誰能進房間、能看什么、能修改什么。 權限三要素&#xff1a; 讀&#xff…

C語言:6.22練習題數組解答

#include <stdio.h> #include <string.h> // 用于 strlen() int main() {char a[100];int j 0;// 從用戶輸入讀取字符串printf("請輸入一個字符串: ");fgets(a, sizeof(a), stdin);// 遍歷字符串中的每個字符for (int i 0; i < strlen(a); i) {if (…

一、docker的安裝

一、docker桌面 二、docker的配置文件 1、docker配置文件位置/etc/docker/daemon.json 使用json格式&#xff0c;graphdata-root {"graph":"/deploy/docker","registry-mirrors": ["https://8auvmfwy.mirror.aliyuncs.com"],"…

Matlab 多項式擬合點法線(二維)

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 這個思路其實很簡單,假設我們有一組曲線點,我們可以對其擬合曲線并計算其導數來獲取每個點的法向量,當然這一思路也可以擴展至三維。具體過程如下所示: 二、實現代碼 %% *********

DeepSeek-R1 論文閱讀總結

1. QA問答&#xff08;我的筆記&#xff09; Q1: DeepSeek如何處理可讀性問題&#xff1f; 通過構建冷啟動數據&#xff08;數千條長CoT數據&#xff09;微調基礎模型&#xff0c;結合多階段訓練流程&#xff08;RL訓練、拒絕采樣生成SFT數據&#xff09;&#xff0c;并優化輸…

Manus AI:多語言手寫識別的技術革命與未來圖景

摘要&#xff1a;在全球化浪潮下&#xff0c;跨語言溝通的需求日益迫切&#xff0c;但手寫文字的多樣性卻成為技術突破的難點。Manus AI憑借其多語言手寫識別技術&#xff0c;將潦草筆跡轉化為精準數字文本&#xff0c;覆蓋全球超百種語言。本文從技術原理、應用場景、行業價值…