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.rhkb.cn/news/32472.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4个 Vue 路由实现的过程

大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻‍💻,关注我,科技未来或许我能帮到你! Vue 路由相信朋友们用的都很熟了,但是你知道 Vue 路由…

es-索引详解

在 Elasticsearch 中,**索引(Index)**是核心概念之一,类似于关系型数据库中的“表”。索引用于存储、组织和检索文档(Document)。以下是关于 Elasticsearch 索引的详细解析: 1. 索引的基本概念 …

C#实现本地Deepseek模型及其他模型的对话v1.4

前言 系 统:Window11 开发工具:Visual Studio 2022 相关技术:C# 、WPF .Net 8.0 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 新增根据聊天记录回复的功能。 优化了部分ViewModel&#xff…

若依框架-给sys_user表添加新字段并获取当前登录用户的该字段值

目录 添加字段 修改SysUser类 修改SysUserMapper.xml 修改user.js 前端获取字段值 添加字段 若依框架的sys_user表是没有age字段的,但由于业务需求,我需要新添加一个age字段: 修改SysUser类 添加age字段后,要在SysUser类 …

用Qt手搓AI助手,挑战24小时开发DeepSeek Assistant!

一、项目需求分析与技术选型 DeepSeekAssistant是一款基于深度求索(DeepSeek)API的智能对话助手,核心需求包括: 用户界面友好:支持多轮对话展示数据持久化:历史记录存储与检索异步网络通信:AP…

linux 软件扩展GPU显存

概述 共享内存可以通过 Unified Memory(统一内存)来实现,它允许 CPU 和 GPU 共享相同的内存地址空间,从而方便数据的传输和访问。 利用该技术可解决家用GPU 机器学习时显存不足的问题 (注: 虽然解决了爆显…

Linux——进程初步

学进程前我们需要知道什么? 一、冯诺依曼体系结构 图中就是我们电脑运作时的大致工作流程,其中输入设备、输出设备我们也叫外设。其中,输入设备有比如键盘、鼠标、磁盘、摄像头等。输出设备有显示器、磁盘、打印机等。图中的存储器我们也叫内…

LeetCode-122. 买卖股票的最佳时机 II

其实这题画个折线图就很清晰了&#xff0c;因为我们每天都可以买卖股票&#xff0c;所有我们就只计算上升趋势的股票收益就好了&#xff0c;最小刻度为1&#xff0c;进行差值计算&#xff0c;取总和。 var maxProfit function(prices){let sum0;for(let i1;i<prices.leng…

关于前后端整合和打包成exe文件的个人的总结和思考

前言 感觉有很多东西&#xff0c;不知道写什么&#xff0c;随便写点吧。 正文 前后端合并 就不说怎么开发的&#xff0c;就说点个人感觉重要的东西。 前端用ReactViteaxios随便写一个demo&#xff0c;用于CRUD。 后端用Django REST Framework。 设置前端打包 import { …

Vue | 开学第一课!零基础教程

目录 背景介绍 安装方式 下载环境软件 NodeJS手册 如何查看node版本 镜像源 完整流程 创建根文件夹并拖进 VSCode 调用控制台 安装 vite 脚手架 配置项目 安装依赖 启动项目 查看页面 问题 创建项目失败 解决方法 权限问题 解决方法 其他问题 背景介绍 今…

泛微ecode的页面开发发送请求参数携带集合

1.在开发过程中我们难免遇见会存在需要将集合传递到后端的情况&#xff0c;那么这里就有一些如下的注意事项&#xff0c;如以下代码&#xff1a; // 新增action.boundasync addQuestion(formData) {var theList this.questionAnswerList;var questionAnswerListArray new Ar…

Tomato靶机攻略

将tomato改为NAT模式 扫描ip arp-scan -l 扫描端口&#xff0c;发现ssh服务端口从22改为2211 扫描目录 发现http://192.168.31.134/antibot_image/ 访问 查看所有php文件的源码&#xff0c;看看有什么不同的地方 在info.php的源码中发现问题 在输入后&#xff0c;成功显示…

EasyRTC嵌入式音视频通话SDK:基于纯C语言的跨平台实时通信系统设计与实践

随着物联网、移动互联网的快速发展&#xff0c;实时音视频通信技术在智能硬件、远程协作、工业控制等领域广泛应用。然而&#xff0c;跨平台兼容性差、资源占用高、定制化难等问题&#xff0c;仍是传统RTC方案的痛点。 EasyRTC嵌入式音视频通话SDK凭借纯C语言设计与全平台覆盖…

HCIP复习拓扑练习(修改版)

拓扑&#xff1a; 实际&#xff1a; 需求&#xff1a; 需求分析 1.这意味着学校内部网络能够正常解析域名并进行互联网访问。 2. PC1和PC2处于同一个内网192.168.1.0/24&#xff0c;其中PC1有权限访问外部网段3.3.3.0/24&#xff0c;而PC2没有。这涉及ACL&#xff08;访问控制…

vue-next-admin修改配置指南

目录 1.如何开启侧边栏logo 2.修改侧边栏顶部的logo与文字 3.修改侧边栏路由logo 4.浏览器标题栏图标与文字修改 5.修改侧边栏的背景颜色、顶部导航栏背景颜色、字体颜色、激活时颜色等 6.去除或添加修改右上方放大、信息、头像昵称&#xff08;登录获取之后存储进行修改图…

ruoyi-cloud-plus编译记录-1

dockerfile部署jar 添加一个run configuration ‘ruoyi-nacos’ run configuration 参考Docker - 在IntelliJ IDEA中一键部署项目 - hucat - 博客园 jar包编译不成功&#xff0c;没有jar&#xff0c;docker部署nacos就没法进行下去 参考链接 maven 构建报错 This failure was…

【算法day8】整数反转

整数反转 https://leetcode.cn/problems/reverse-integer/description/ class Solution { public:int reverse(int x) {int MAX_LENGTH 11; // 32位整数的最大数字的位数int* num (int*)calloc(sizeof(int), MAX_LENGTH); //用于保存进位每一位的数字int current x;int pos…

MySQL库和表的操作详解:从创建库到表的管理全面指南

目录 一、MySQL库的操作详解 〇、登录MySQL 一、数据库的创建与字符集设置 1. 创建数据库的语法 2. 创建数据库示例 查看创建出来的文件: bash下查看MySQL创建的文件 二、字符集与校验规则 1. 查看系统默认设置 2. 查看支持的字符集与校验规则 3. 校验规则对查询的影响…

Linux中的基本指令(上)

目录 ls指令 判断linux中文件 pwd指令 认识路径 ​编辑 绝对路径/相对路径 cd指令 简要理解用户 理解家目录 echo指令和printf指令 touch指令 mkdir指令 cat指令 tree指令 rmdir指令和rm指令 man指令 cp指令 which指令 alias 指令 date指令 cal指令 理解…

WPF 与 GMap.NET 结合实现雷达目标动态显示与地图绘制

概述 雷达上位机是雷达系统中用于数据可视化、分析和控制的核心软件。本文将介绍如何使用 C# 和 WPF 框架开发一个雷达上位机程序&#xff0c;主要功能包括&#xff1a; 显示目标轨迹&#xff1a;在界面上实时绘制雷达探测到的目标轨迹。点击显示详细信息&#xff1a;用户点击…