Windows 11下Git Bash執行cURL腳本400問題、CMD/PowerShell不能執行多行文本等問題記錄及解決方案

問題

在Postman里可成功執行的POST請求:
在這里插入圖片描述
找到Postman的Code
在這里插入圖片描述
因為cURL基本上算是行業標準,所以Postman默認選中cURL,支持切換不同的開發語言:
在這里插入圖片描述
點擊上圖右上角的復制按鈕,得到cURL腳本。

Windows 11家庭版,打開Git Bash客戶端,版本為:
git version 2.47.1.windows.1
在這里插入圖片描述
執行上述cURL腳本異常:
在這里插入圖片描述
報錯信息:

{"code":400,"msg":"JSON parse error: Invalid UTF-8 start byte 0xb4; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0xb4\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 3, column: 18]"}

分析

根據上面幾行簡短的報錯信息,提取幾個關鍵內容:

  • code=400:表明這是客戶端異常,此處的客戶端是Git Bash;
  • JsonParseException和StreamUtils:表明服務端確實有接收到客戶端提交的請求,要不然客戶端也無法得知Jackson框架里的類JsonParseException,當然也無法得知Spring框架里的StreamUtils工具類;
  • 報錯原因是非法JSON:JSON parse error
  • 編碼異常:Invalid UTF-8 start byte 0xb4

分析起來,看起來頭頭是道,怎么解決問題呢?

排查

遇到問題時,還是習慣性將問題拋給ChatGPT,結果這次是真的全程被ChatGPT的胡言亂語給糊弄,浪費不少時間。
在這里插入圖片描述
一一嘗試:

  • 很明確是小寫雙引號,不是大寫雙引號;
  • 將上述cURL腳本使用txt文件保存,并保存為不帶BOM的格式,沒有解決問題;
    在這里插入圖片描述
  • 報錯提示是第三行line: 3, column: 18,好像是min_score字段,去掉引號試試,還是報錯:
    在這里插入圖片描述
  • --data-binary還是報錯:
    在這里插入圖片描述

方法一

反復嘗試+試錯,浪費不少時間,ChatGPT終于給出一個可行的解決方案:
在這里插入圖片描述
也就是在Git Bash執行的目錄下,新增一個payload.json文件,內容就是POST請求的requestBody:

{"retriever_type": "TEXT","question": "大模型技術如何幫助數據中心實現高效減碳?","min_score": "0.2","max_results": "10"
}

然后將命令:

--data '{"retriever_type": "TEXT","question": "大模型技術如何幫助數據中心實現高效減碳?","min_score": "0.2","max_results": "10"
}'

修改為(其他部分不變):--data @payload.json

執行效果:
在這里插入圖片描述

方法二

為了執行一個在Postman可以成功執行的cURL腳本,我需要另存為一個JSON文件,感覺非常反人類。于是繼續追問ChatGPT,給出一個不使用文件的方法:

printf '%s' '{"retriever_type": "TEXT","question": "大模型技術如何幫助數據中心實現高效減碳?","min_score": "0.2","max_results": "10"
}' | curl --location 'http://api.test.tesla.com/rag_online/rag/retrieval' \--header 'tesla-token: 1111222233334444' \--header 'Content-Type: application/json' \--data @-

和上面的解決方法非常類似。

GET

Git Bash客戶端下執行cURL GET命令沒有問題,只是在執行POST命令才有問題。
在這里插入圖片描述

CMD/PowerShell

既然Git Bash客戶端不能用,于是將注意力放在其他客戶端。

打開cmd或PowerShell,粘帖cURL腳本,結果給我提示:您將粘貼包含多行的文本。如果將此文本粘貼到 shell 中,則可能會導致命令意外執行。是否繼續?
在這里插入圖片描述
如上圖所示,CMD和PowerShell無法識別多行cURL腳本,會拆分成多行,當然會執行失敗。

怎么解決?

ChatGPT又讓我失望
在這里插入圖片描述
在這里插入圖片描述
并不能解決問題。

Google找到一篇類似的報錯Jackson JSON parser invalid utf-8 start byte。

TODO:未解決。

Mac

上述cURL腳本在同事的Mac開發機上(使用的終端未知),可執行成功。

解決方案

Git Bash

如果是GET請求,直接可使用Git Bash。但是對于POST請求,如果堅持要使用Git Bash客戶端,有兩種方法:

  • 使用文件
curl --location 'http://api.test.tesla.com/rag_online/rag/retrieval' \
--header 'tesla-token: 1111222233334444' \
--header 'Content-Type: application/json' \
--data @payload.json
  • 使用管道符
printf '%s' '{"retriever_type": "TEXT","question": "大模型技術如何幫助數據中心實現高效減碳?","min_score": "0.2","max_results": "10"
}' | curl --location 'http://api.test.tesla.com/rag_online/rag/retrieval' \--header 'ecmas-token: 1111222233334444' \--header 'Content-Type: application/json' \--data @-

在這里插入圖片描述

Mac

Mac比Windows強,受開發者青睞,不是沒有原因的。

WSL

Windows 8不知道什么時候開始支持WSL,另外貌似有不少問題,Windows 10/11好像也不是一開始就支持WSL的。

總而言之,如果可以的話,建議升級Windows版本,安裝WSL,比CMD、PowerShell功能強大:
在這里插入圖片描述
使用WSL可執行多行cURL腳本。當然,WSL是一個Ubuntu系統,默認自帶cURL命令。

關于WSL,參考我寫的另一篇Windows 10/11安裝使用WSL。

參考

  • ChatGPT

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

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

相關文章

Docker基礎入門(一)

初識Docker 什么是Docker Docker是一個快速交付應用、運行應用的技術: 可以將程序及其依賴、運行環境一起打包為一個鏡像,可以遷移到任意Linux操作系統運行時利用沙箱機制形成隔離容器,各個應用互不干擾啟動、移除都可以通過一行命令完成&…

容器編排革命:從 Docker Run 到 Docker Compose 的進化之路20250309

容器編排革命:從 Docker Run 到 Docker Compose 的進化之路 一、容器化部署的范式轉變 在 Docker 生態系統的演進中,容器編排正從“手動操作”走向“自動化管理”。根據 Docker 官方 2023 年開發者調查報告,78% 的開發者已采用 Docker Compo…

c++ 嵌入匯編的方式實現int型自增

x86/x86_64 實現 x86 平臺上&#xff0c;使用 LOCK XADD 指令來實現原子自增&#xff1a; #include <iostream>inline int atomic_increment_x86(int* value) {int result;__asm__ __volatile__("lock xaddl %1, %0": "m"(*value), "r"(…

區塊鏈與去中心化技術

區塊鏈與去中心化技術 核心進展 區塊鏈從加密貨幣&#xff08;如比特幣&#xff09;擴展至智能合約和供應鏈管理。以太坊2.0引入分片技術提升交易吞吐量&#xff0c;而零知識證明&#xff08;ZKP&#xff09;增強了隱私保護15。企業級應用如IBM的Food Trust平臺通過區塊鏈追蹤…

逐夢DBA:Linux環境下 MySQL 的卸載

1. 查看是否安裝過MySQL&#xff0c;如果不存在&#xff0c;則不顯示任何內容 rpm -qa | grep -i mysql # -i 忽略大小寫 2. 查看MySQL服務狀態 systemctl status mysqld.service 3. 關閉 mysql 服務 systemctl stop mysqld.service 4. 查看當前 mysql 卸載狀況 rpm -qa…

【藍橋杯python研究生組備賽】003 貪心

題目1 股票買賣 給定一個長度為 N 的數組&#xff0c;數組中的第 i 個數字表示一個給定股票在第 i 天的價格。 設計一個算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易&#xff08;多次買賣一支股票&#xff09;。 注意&#xff1a;你不能同時參與多筆交易&…

網絡通信Socket中多態HandleIO設計模式深度解析

網絡通信 Socket 中多態 handleIO 詳細講解 大綱 引言 網絡通信的重要性Socket 編程在網絡通信中的地位多態 handleIO 的意義和作用 Socket 編程基礎 Socket 的基本概念Socket 的類型&#xff08;TCP 和 UDP&#xff09;Socket 編程的基本流程 多態的概念與實現 多態的定義和…

flutter 如何與原生框架通訊安卓 和 ios

在 Flutter 中與原生框架&#xff08;Android 和 iOS&#xff09;進行通信的主要方式是通過 **平臺通道&#xff08;Platform Channels&#xff09;**。平臺通道允許 Flutter 代碼與原生代碼進行雙向通信。以下是詳細的步驟和示例&#xff0c;說明如何在 Flutter 中與 Android …

LabVIEW VI Scripting實現連接器窗格自動化

通過VI Scripting自動化配置連接器窗格&#xff0c;可大幅提升開發效率、統一接口規范&#xff0c;并適配動態需求。以下為真實場景中的典型應用案例&#xff0c;涵蓋工業、汽車電子及教育領域&#xff0c;展示其實際價值與實施效果。 特點&#xff1a; 程序化配置&#xff1a;…

1-001:MySQL的存儲引擎有哪些?它們之間有什么區別?

MySQL 存儲引擎 ├── InnoDB&#xff08;默認引擎&#xff09; │ ├── 事務支持&#xff1a;支持 ACID 和事務&#xff08;事務日志、回滾、崩潰恢復&#xff09; │ ├── 鎖機制&#xff1a;支持行級鎖&#xff0c;提高并發性能 │ ├── 外鍵支持&#xff1a;支持外鍵…

package.json 依賴包約束及快速刪除node_modules

文章目錄 一、package.json版本約束1、初始項目安裝2. 已有 yarn.lock 文件的項目安裝3. 特殊情況手動修改 package.json 版本&#xff1a;使用 yarn upgrade 命令&#xff1a; 二、快速刪除node_modules三、depcheck 檢測npm未使用的依賴 一、package.json版本約束 1、初始項…

Redis Sentinel (哨兵模式)深度解析:構建高可用分布式緩存系統的核心機制

一、傳統主從復制的痛點 在分布式系統架構中&#xff0c;Redis 作為高性能緩存和數據存儲解決方案&#xff0c;其可用性直接關系到整個系統的穩定性。傳統的主從復制架構雖然實現了數據冗余&#xff0c;但在面臨節點故障時仍存在明顯缺陷&#xff1a; ?手動故障轉移&#xf…

[免費]微信小程序(圖書館)自習室座位預約管理系統(SpringBoot后端+Vue管理端)(高級版)【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的微信小程序(圖書館)自習室座位預約管理系統(SpringBoot后端Vue管理端)(高級版)&#xff0c;分享下哈。 項目視頻演示 【免費】微信小程序(圖書館)自習室座位預約管理系統(SpringBoot后端Vue管理端)(高級版…

微服務架構下的 Node.js

Node.js 在微服務架構中的特點 輕量級和高效性 Node.js 以其輕量級和高效的特點&#xff0c;非常適合構建微服務架構。它具有事件驅動和非阻塞 I/O 模型&#xff0c;能夠在處理高并發請求時表現出色。這意味著 Node.js 可以同時處理大量的并發連接&#xff0c;而不會因為阻塞…

Linux 配置靜態 IP

一、簡介 在 Linux CentOS 系統中默認動態分配 IP 地址&#xff0c;每次啟動虛擬機服務都是不一樣的 IP&#xff0c;因此要配置靜態 IP 地址避免每次都發生變化&#xff0c;下面將介紹配置靜態 IP 的詳細步驟。 首先先理解一下動態 IP 和靜態 IP 的概念&#xff1a; 動態 IP…

為什么 HTTP GET 方法不使用請求體?

本指南將揭示為什么 HTTP GET 方法不像其他 HTTP 方法那樣使用請求體&#xff0c;以及如何在 API 開發中有效地使用 GET 請求。 當談到 HTTP&#xff08;超文本傳輸協議&#xff09;時&#xff0c;您可能會好奇為什么 GET 方法通常不涉及請求體。在 Web 請求中&#xff0c;發送…

java后端--定時任務

定時任務 一、簡述二、注解1.Scheduled屬性&#xff1a; 2.EnableScheduling 三、案例 一、簡述 在java后端開發中&#xff0c;經常遇到一些任務需要頻繁發生&#xff0c;每次都人工調用太麻煩&#xff0c;這時就用到了定時任務進行自動化調用&#xff0c;大大便利了程序員的開…

JVM垃圾回收面試題及原理

1. 對象什么時候可以被垃圾器回收 如果一個或多個對象沒有任何的引用指向它了&#xff0c;那么這個對象現在就是垃圾&#xff0c;如果定位了垃圾&#xff0c;則有可能會被垃圾回收器回收 如果要定位什么是垃圾&#xff0c;有兩種方式來確定 引用計數法可達性分析算法 1.1 …

《Mycat核心技術》第19章:基于MySQL實現讀寫分離

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章匯總&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球項目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

【安卓逆向】安卓病毒介紹及其簡單案例分析

目錄 引言 一、Android 病毒介紹及分析方法 1.1 Android 病毒預覽 1.2 Android 病毒分析必備知識 1.3 Android 病毒的常見類型及惡意行為 1.3.1 常見病毒類型 1.3.2 常見病毒行為 1.4 病毒激活條件 1.5 Android 病毒的傳播方式 1.6 Android 病毒分析的一般方法 二…