如何使用 cURL 发布 JSON 数据?_curl发送json数据_HuntsBot
问:
我使用 Ubuntu 并在其上安装了 cURL。我想用 cURL 测试我的 Spring REST 应用程序。我在 Java 端编写了我的 POST 代码。但是,我想用 cURL 测试它。我正在尝试发布 JSON 数据。示例数据如下:
{"value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true}
我使用这个命令:
curl -i \
-H "Accept: application/json" \
-H "X-HTTP-Method-Override: PUT" \
-X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true \
http://localhost:8080/xx/xxx/xxxx
它返回此错误:
HTTP/1.1 415 Unsupported Media Type
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1051
Date: Wed, 24 Aug 2011 08:50:17 GMT
错误描述是这样的:
服务器拒绝此请求,因为请求实体的格式不受请求的方法 () 的请求资源支持。
Tomcat 日志:“POST /ui/webapp/conf/clear HTTP/1.1”415 1051
cURL 命令的正确格式是什么?
这是我的 Java 端 PUT 代码(我已经测试了 GET 和 DELETE 并且它们可以工作):
@RequestMapping(method = RequestMethod.PUT)
public Configuration updateConfiguration(HttpServletResponse response, @RequestBody Configuration configuration) { //consider @Valid tag
configuration.setName("PUT worked");
//todo If error occurs response.sendError(HttpServletResponse.SC_NOT_FOUND);
return configuration;
}
答1:
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
您需要将内容类型设置为 application/json。但是 -d(或 --data)发送 Content-Type application/x-www-form-urlencoded,这在 Spring 方面是不被接受的。
查看 curl man page,我认为您可以使用 -H(或 --header):
-H "Content-Type: application/json"
完整示例:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username":"xyz","password":"xyz"}' \
http://localhost:3000/api/login
(-H 是 --header 的缩写,-d 是 --data 的缩写)
请注意,如果您使用 -d,则 -request POST 是可选,因为 -d 标志意味着一个 POST 请求。
在 Windows 上,情况略有不同。请参阅评论线程。
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
对于 Windows,json 周围的单引号不起作用,我最终转义了双引号。 curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
对于 Windows 下的我,我需要使用这种格式 "{ """key1""": """value1""" }" 的引号来转义引号。还有这个答案:stackoverflow.com/questions/18314796/…
我遇到了 POST 请求的问题,但通过大写的“Application/json”解决了它,所以如果您收到 415 错误,请检查大写。
@Adam Tuttle 为什么你的评论有这么多赞成?在 ubuntu 14.04 上使用 curl,您需要 "Content-Type: application/json",而不仅仅是 "application/json"。这浪费了我很多时间...
@ostrokach 抱歉,它浪费了您的时间。当我发布它(没有重试)时,语法对我来说在 OSX 上运行良好。猜猜它是/只是平台差异。我想赞成票来自它帮助过的人。
答2:
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
尝试将您的数据放入文件中,例如 body.json,然后使用
curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf
您可能应该使用 --data-binary 选项而不是 --data。人们会期望客户端按原样发送数据,但 --data 从输入中去除 CR 和 LF。
使用带有内联 json 字符串的 cUrl 似乎是一场噩梦。需要转义双引号字符。使用这样的文件会更好。
请务必在文件名前添加 @ 字符,否则将不起作用。我只花了 20 分钟在这个垃圾上敲我的头......
这样,您还可以对文件运行 JSON lint 以查看解析 JSON 时是否有错误。
在 Windows 上,您需要在文件名“@body.json”两边加上双引号
答3:
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
对于 Windows,对 -d 值使用单引号对我不起作用,但在更改为双引号后它确实起作用。我还需要在大括号内转义双引号。
也就是说,以下内容不起作用:
curl -i -X POST -H "Content-Type: application/json" -d '{"key":"val"}' http://localhost:8080/appname/path
但以下工作:
curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path
仅供参考 - 看起来你在 json 主体周围缺少一个结束双引号
对于 Windows 上的我来说,数据周围的 " 不起作用,没有引号起作用
如果您使用的是 PowerShell,请参阅 this 答案。
出于改进报价处理和许多其他原因,停止使用古老/弱 cmd.exe 并尝试改进的 shell 之一,例如来自 gitforwindows.org 站点的 Git-Bash。 (强烈推荐,即使你不使用 Git。)
答4:
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
您可能会发现 resty 很有用:https://github.com/micha/resty
它是一个 CURL 的包装器,它简化了命令行 REST 请求。您将它指向您的 API 端点,它会为您提供 PUT 和 POST 命令。 (示例改编自主页)
$ resty http://127.0.0.1:8080/data #Sets up resty to point at your endpoing
$ GET /blogs.json #Gets http://127.0.0.1:8080/data/blogs.json
#Put JSON
$ PUT /blogs/2.json '{"id" : 2, "title" : "updated post", "body" : "This is the new."}'
# POST JSON from a file
$ POST /blogs/5.json < /tmp/blog.json
此外,通常仍然需要添加 Content Type 标头。不过,您可以这样做一次,以设置默认值,即为每个站点的每个方法添加配置文件:Setting default RESTY options
答5:
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
它对我有用:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":100}' http://localhost/api/postJsonReader.do
它很高兴地映射到 Spring 控制器:
@RequestMapping(value = "/postJsonReader", method = RequestMethod.POST)
public @ResponseBody String processPostJsonData(@RequestBody IdOnly idOnly) throws Exception {
logger.debug("JsonReaderController hit! Reading JSON data!"+idOnly.getId());
return "JSON Received";
}
IdOnly 是具有 id 属性的简单 POJO。
答6:
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
https://i.stack.imgur.com/g8F0j.png
https://i.stack.imgur.com/fD0dp.png
笔记:
最新的 Postman 版本进行了一些 UI 升级,现在侧栏中提供了代码链接。
https://i.stack.imgur.com/7vOBG.png
最好的答案,节省了很多时间,谢谢:)
答7:
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
例如,创建一个 JSON 文件 params.json,并将以下内容添加到其中:
[
{
"environment": "Devel",
"description": "Machine for test, please do not delete!"
}
]
然后你运行这个命令:
curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server
专业提示:将此行添加到您的 ~/.curlrc 文件:--header Content-Type:Application/JSON
答8:
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
我只是遇到了同样的问题。我可以通过指定来解决它
-H "Content-Type: application/json; charset=UTF-8"
答9:
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
这对我来说效果很好。
curl -X POST --data @json_out.txt http://localhost:8080/
在哪里,
-X 表示 http 动词。
–data 表示您要发送的数据。
-X POST 在此示例中是多余的
@SoftwareEngineer,但至少它对初学者有指导意义。
最好有透明但冗余的代码,而不是不透明的代码。我也更喜欢 --data 而不是 -d。这取决于团队对 Bash 的整体使用情况,但对于 Bash 初学者和不每天使用它的人来说绝对更容易。
答10:
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
您可以使用 Postman 及其直观的 GUI 来组装您的 cURL 命令。
安装并启动 Postman 输入您的 URL、帖子正文、请求标头等。 pp. 单击代码 从下拉列表中选择 cURL 复制并粘贴您的 cURL 命令
注意:下拉列表中有几个用于自动生成请求的选项,这就是为什么我认为我的帖子首先是必要的。
没有意识到 Postman 中包含该功能。感谢您指出!
答11:
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
HTTPie 是 curl 的推荐替代品,因为您可以这样做
$ http POST http://example.com/some/endpoint name=value name1=value1
它默认使用 JSON,并且会为您设置必要的标头以及将数据编码为有效的 JSON。还有:
Some-Header:value
对于标题,和
name==value
用于查询字符串参数。如果你有大量数据,你也可以从一个文件中读取它,并对其进行 JSON 编码:
field=@file.txt
我祈祷这是一个标准 - 至少在每台服务器上可用/预安装方面。
此外,如果 httpie 支持溢出 curl 格式的命令,那将是很好的,以应对 httpie 在特定主机上不可用的情况。
原文链接:https://www.huntsbot.com/qa/Dk66/how-do-i-post-json-data-with-curl?lang=zh_CN&from=csdn
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
相关文章
- HTML+CSS个人静态网页设计_aghewugwe_html+css网页制作
- DQN(Nature DQN)算法流程讲解_定鼎_dqn算法
- pytorch 手写数字识别1_明朝百晓生
- Python中的切片(详细篇)学起来喔_Zombie_QP_python切片
- Tiktok/抖音全球用户数据统计_duoduo77ii_tiktok 用户量
- HTML小游戏9 ?? 潜行游戏《侠盗罗宾汉》(附完整源码)_鲸落?_html小游戏源码
- HBASE默认端口_lansye_hbase端口
- 【hadoop】常见期末考试客观题大全_蓝宝贝啦_hadoop期末考试题
- 2022年最新前端面试题(大前端时代来临卷起来吧小伙子们..持续维护走到哪记到哪)_有两把刷子_前端面试
- Spring - ApplicationContextInitializer 扩展接口_小小工匠
- YOLOv7训练自己的数据集(超详细)_AI小白一枚_yolo训练自己的数据集
- 使用TensorFlow Probability实现最大似然估计_deephub
- nacos--基础--3.3--集成--spring--常用注解_单身贵族男
- mac 终端运行python的.py脚本_Amily1123_mac python怎么运行
- iOS启动优化之??如何使用Xcode Log、App Launch、代码来计算启动时间 Launch Time_阿飞正传的阿飞_x-xcode-log
- 【HTML5】弹性盒子实现导航栏和留言框_程序猿爱打拳_html导航条弹性盒子