Windows下curl报错:curl: (3) unmatched close brace/bracket in URL position x

发布于:2024-08-15 ⋅ 阅读:(119) ⋅ 点赞:(0)

问题

之前都是使用 postman 或 Apifox 测试接口,或者在 Linux 上使用 curl 命令测试接口,偶然在 windows 电脑上使用了 curl 命令测试接口,竟然报错 curl: (3) unmatched close brace/bracket in URL position x,如下图所示:

报错

一开始以为参数使用不当,后来反复对比下方的 curl 标准用法,并没有什么区别。

curl -X POST \
     -H "Content-Type: application/json" \
     -d '{"key": "value"}' \
     http://example.com/api/data

解释

  • -X POST: 指定请求方法为 POST。
  • -H "Content-Type: application/json": 设置请求头中的 Content-Type 为 application/json,这告诉服务器请求体中的数据是 JSON 格式。
  • -d '{"key": "value"}': 设置请求体数据为 JSON 字符串 { “key”: “value” }。

使用 --data-raw 或 -d
如果 JSON 数据中包含特殊字符,可能需要使用 --data-raw-d 选项来避免对数据进行 URL 编码,这是不必要的。

原因

查询一番后,发现在 Windows 的命令行(cmd),curl 命令的语法与 Linux/Unix 稍有不同,主要表现在对引号的处理上。Windows 命令行不支持单引号作为字符串的定界符,需要使用双引号代替。

例如,如果在 Linux 上使用如下的 curl 命令:

curl -X POST -H 'Content-Type: application/json' -d '{"key1":"value1", "key2":"value2"}' http://example.com/api

解决办法1

在 Windows 上,则需要将单引号换成双引号,Windows 中的双引号包裹的字符串如果本身包含双引号(如 JSON 中的键值对),则这些内嵌的双引号需要进行转义,使用反斜杠 \ 进行转义。

curl -X POST -H "Content-Type: application/json" -d "{\"key1\":\"value1\", \"key2\":\"value2\"}" http://example.com/api

转义

解决办法2

使用 Gitbash,支持 linux 命令语法:

gitbash

解决办法3

使用文件存储 json 数据,将 a 存入add-field.txt,在文件所在目录执行下列命令:

curl -X POST -H "Content-Type: application/json" --data-binary @add-field.txt http://localhost:5000/process_data

文件存储json数据

如果还有更好的方法,欢迎留言讨论~


网站公告

今日签到

点亮在社区的每一天
去签到