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.mzph.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 病毒分析的一般方法 二…