Linux用curl调用应用接口

2023-05-16

很多同学都用postman测试过后台应用接口,的确非常方便。今天这里介绍一下在Liunx下用curl命令测试接口的方法和遇到的一些问题,包括url传参转义和中文传参报错的问题,这里都提供解决办法。下面我们来看一个示例吧:

1.我们的后台采用JAVA程序接口,这里只列部分代码

    @PostMapping("/testc/{id}")
    public Object testc(@PathVariable("id") Long id,
                        @RequestParam(value = "name", required = false) String name,
                        @RequestParam(value = "age", required = false) Integer age,
                        @RequestBody User user){
        Map<String, User> map = new HashMap<String,User>();
        User u = new User();
        u.setId(id);
        u.setName(name);
        u.setAge(age);
        map.put("uuu", u);
        map.put("uuu2", user);

        return map;
    }

2.启动应用后(接口地址:http://192.168.20.149:8080/testc),我们在shell命令行中进行测试(如果是windows上可以在GitBash上进行测试)

2.1.测试一:

curl -i -X POST http://192.168.20.149:8080/testc/1

[root@chinoukin-n1 ~]# curl -i -X POST http://192.168.20.149:8080/testc/1
HTTP/1.1 400 
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: x-requested-with,Authorization
Access-Control-Allow-Credentials: true
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 20 Sep 2018 06:46:12 GMT
Connection: close

{"timestamp":1537425972603,"status":400,"error":"Bad Request","message":"Required request body is missing: public java.lang.Object com.wisea.demoh2.controller.TestController.testc(java.lang.Long,java.lang.String,java.lang.Integer,com.wisea.demoh2.entity.User)","path":"/testc/1"}[root@chinoukin-n1 ~]# 
[root@chinoukin-n1 ~]# 

  通过测试可以发现报400错误,原因现在没有指定request body参数,下面先通过指定一个空json数据测试

2.2.测试二:

curl -i -X POST --data '{}' http://192.168.20.149:8080/testc/1

[root@chinoukin-n1 ~]# curl -i -X POST --data '{}' http://192.168.20.149:8080/testc/1
HTTP/1.1 415 
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: x-requested-with,Authorization
Access-Control-Allow-Credentials: true
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 20 Sep 2018 06:52:12 GMT

{"timestamp":1537426332587,"status":415,"error":"Unsupported Media Type","message":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported","path":"/testc/1"}

  通过测试可以发现报415错误,原因是请求头参数Content-Type没有指定,默认是application/x-www-form-urlencoded;charset=UTF-8,下面我们指定为application/json来测试

2.3.测试三:

curl -i -X POST -H 'Content-Type:application/json;charset=UTF-8' --data '{}' http://192.168.20.149:8080/testc/1

[root@chinoukin-n1 ~]# curl -i -X POST -H 'Content-Type:application/json;charset=UTF-8' --data '{}' http://192.168.20.149:8080/testc/1
HTTP/1.1 200 
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: x-requested-with,Authorization
Access-Control-Allow-Credentials: true
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 20 Sep 2018 07:02:22 GMT

{"uuu":{"id":1,"name":null,"age":null},"uuu2":{"id":null,"name":null,"age":null}}

  可以发现通过测试了,下面补全参数进行测试

2.4.测试四:

curl -i -X POST -H 'Content-Type:application/json;charset=UTF-8' --data '{"id":2,"name":"chenyingqin","age":18}' \

http://192.168.20.149:8080/testc/1?name=chinoukin&age=19

[root@chinoukin-n1 ~]# curl -i -X POST -H 'Content-Type:application/json;charset=UTF-8' --data '{"id":2,"name":"chenyingqin","age":18}' http://192.168.20.149:8080/testc/1?name=chinoukin&age=19
[1] 2463
[root@chinoukin-n1 ~]# HTTP/1.1 200 
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: x-requested-with,Authorization
Access-Control-Allow-Credentials: true
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 20 Sep 2018 07:06:24 GMT

{"uuu":{"id":1,"name":"chinoukin","age":null},"uuu2":{"id":2,"name":"chenyingqin","age":18}}

   可以发现测试通过了,但是可以看到对象“uuu”的age是空,而设定的是19。通过第二行不难发现,这是因为Linux把URL传参中的“&”当成启动后台进程了,下面进行字符转义(\&)测试

2.5.测试五:

curl -i -X POST -H 'Content-Type:application/json;charset=UTF-8' --data '{"id":2,"name":"chenyingqin","age":18}' \

http://192.168.20.149:8080/testc/1?name=chinoukin\&age=19

[root@chinoukin-n1 ~]# curl -i -X POST -H 'Content-Type:application/json;charset=UTF-8' --data '{"id":2,"name":"chenyingqin","age":18}' http://192.168.20.149:8080/testc/1?name=chinoukin\&age=19
HTTP/1.1 200 
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: x-requested-with,Authorization
Access-Control-Allow-Credentials: true
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 20 Sep 2018 07:13:55 GMT

{"uuu":{"id":1,"name":"chinoukin","age":19},"uuu2":{"id":2,"name":"chenyingqin","age":18}}

   可以发现测试完美通过,对象“uuu”的age也正常了。这是同学们可能觉得就完美了,已经完事了,洗洗睡了。但是...

2.6.测试六:

curl -i -X POST -H 'Content-Type:application/json' --data '{"id":2,"name":"chenyingqin大侠","age":18}' \

http://192.168.20.149:8080/testc/1?name=chinoukin大侠\&age=19

[root@chinoukin-n1 ~]# curl -i -X POST -H 'Content-Type:application/json' --data '{"id":2,"name":"chenyingqin大侠","age":18}' http://192.168.20.149:8080/testc/1?name=chinoukin大侠\&age=19
HTTP/1.1 400 
Transfer-Encoding: chunked
Date: Thu, 20 Sep 2018 07:23:25 GMT
Connection: close

  通过测试可以发现报400错误,原因是URL传参中含有中文,下面通过UrlEncode转码一下再进行测试

2.7.测试七:

curl -i -X POST -H 'Content-Type:application/json' --data '{"id":2,"name":"chenyingqin大侠","age":18}' \

http://192.168.20.149:8080/testc/1?name=chinoukin%e5%a4%a7%e4%be%a0\&age=19

[root@chinoukin-n1 ~]# curl -i -X POST -H 'Content-Type:application/json' --data '{"id":2,"name":"chenyingqin大侠","age":18}' http://192.168.20.149:8080/testc/1?name=chinoukin%e5%a4%a7%e4%be%a0\&age=19
HTTP/1.1 200 
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: x-requested-with,Authorization
Access-Control-Allow-Credentials: true
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 20 Sep 2018 07:28:19 GMT

{"uuu":{"id":1,"name":"chinoukin大侠","age":19},"uuu2":{"id":2,"name":"chenyingqin大侠","age":18}}

 可以发现测试完美通过,这时同学们可能觉得终于可以洗洗睡啦,但是...,当我在GitBash上测试,结果不尽人意

2.8.测试八(GitBash):

curl -i -X POST -H 'Content-Type:application/json' --data '{"id":2,"name":"chenyingqin大侠","age":18}' \

http://192.168.20.149:8080/testc/1?name=chinoukin%e5%a4%a7%e4%be%a0\&age=19

chinoukin@DESKTOP-PH67EF6 MINGW64 ~/Desktop
$ curl -i -X POST -H 'Content-Type:application/json' --data '{"id":2,"name":"chenyingqin大侠","age":18}' http://192.168.20.149:8080/testc/1?name=chinoukin%e5%a4%a7%e4%be%a0\&age=19
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   526    0   484  100    42  32266   2800 --:--:-- --:--:-- --:--:-- 35066HTTP/1.1 400
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: x-requested-with,Authorization
Access-Control-Allow-Credentials: true
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 20 Sep 2018 07:33:09 GMT
Connection: close

{"timestamp":1537428789546,"status":400,"error":"Bad Request","message":"JSON parse error: Invalid UTF-8 start byte 0xb4\n at [Source: (PushbackInputStream); line: 1, column: 29]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 start byte 0xb4\n at [Source: (PushbackInputStream); line: 1, column: 29]\n at [Source: (PushbackInputStream); line: 1, column: 16] (through reference chain: com.wisea.demoh2.entity.User[\"name\"])","path":"/testc/1"}

 通过测试可以发现报400错误,原因是windows系统默认编码格式是GBK,而命令行中的中文参数在提交时被转码成GBK了,下面将中文字符进行Unicode转码后再进行测试

2.9.测试九(GitBash):

curl -i -X POST -H 'Content-Type:application/json' --data '{"id":2,"name":"chenyingqin\u5927\u4fa0","age":18}' \

http://192.168.20.149:8080/testc/1?name=chinoukin%e5%a4%a7%e4%be%a0\&age=19

chinoukin@DESKTOP-PH67EF6 MINGW64 ~/Desktop
$ curl -i -X POST -H 'Content-Type:application/json' --data '{"id":2,"name":"chenyingqin\u5927\u4fa0","age":18}' http://192.168.20.149:8080/testc/1?name=chinoukin%e5%a4%a7%e4%be%a0\&age=19
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   152    0   102  100    50    99k  50000 --:--:-- --:--:-- --:--:--  148kHTTP/1.1 200
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: x-requested-with,Authorization
Access-Control-Allow-Credentials: true
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 20 Sep 2018 07:37:27 GMT

{"uuu":{"id":1,"name":"chinoukin大侠","age":19},"uuu2":{"id":2,"name":"chenyingqin大侠","age":18}}

  可以发现测试完美通过了,这下终于可以洗洗睡啦~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux用curl调用应用接口 的相关文章

  • 类似 wget 的 BitTorrent 客户端或库? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 是否有任何
  • 如何查找或计算Linux进程的页表大小和其他内核占用?

    我怎样才能知道 Linux 进程页表有多大 以及任何其他可变大小的进程统计 如果您真的对页表感兴趣 请执行以下操作 cat proc meminfo grep PageTables PageTables 24496 kB
  • 如何从脚本向 sudo 提供密码?

    请注意 这是在我的本地计算机上运行的来宾虚拟机 VBox 我不担心安全性 我正在编写一个将在 Linux Ubuntu VM 上执行的脚本myuser用户 该脚本将在下面创建一个非常大的目录树 etc myapp 目前我必须手动完成所有这些
  • 致命错误:未捕获错误:调用未定义的函数curl_version() - Localhost Dev

    我正在尝试将 stripe 集成到我的 PHP 项目中 但在 localhost 上出现此错误 Fatal error Uncaught Error Call to undefined function curl version in 我正
  • 操作系统崩溃的常见原因[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有兴趣了解 操作系统崩溃 不限于Windows崩溃 最常见的技术原因 从操作系统编程的角度 有哪些 我正在寻找一个不像 打开太多应用
  • 如何使用 tmuxinator 在 tmux 中拆分水平窗格内的两个垂直窗格

    目前我的 tmuxinator yml 文件中有这个 windows editor layout main horizontal panes vim server rails s 这给了我两个窗口 一个用于编辑器 另一个用于服务器 在编辑器
  • Nasm 打印到下一行

    我用 nasm Assembly 编写了以下程序 section text global start start Input variables mov edx inLen mov ecx inMsg mov ebx 1 mov eax 4
  • 如何使用libaudit?

    我试图了解如何使用 libaudit 我想接收有关使用 C C 的用户操作的事件 我不明白如何设置规则 以及如何获取有关用户操作的信息 例如 我想获取用户创建目录时的信息 int audit fd audit open struct aud
  • 如何使用curl将文件上传到Atlassian Confluence页面

    我正在尝试按照远程 API 文档中给出的指南将 xls 文件上传到 Confluence wiki 页面 https developer atlassian com confdev confluence server rest api co
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • 如何使用 bash 脚本关闭所有终端,在每个终端中有效地按 Ctrl+Shift+Q

    我经常打开许多终端 其中一些正在运行重要的进程 例如服务器 而另一些则没有运行任何东西并且可以关闭 如果您按 重要 则会弹出确认提示Cntrl Shift Q在其中 如下所示 我想要一个 bash 脚本 它可以关闭所有终端 但将 重要 终端
  • 使用netcat将unix套接字传输到tcp套接字

    我正在尝试使用以下命令将 unix 套接字公开为 tcp 套接字 nc lkv 44444 nc Uv var run docker sock 当我尝试访问时localhost 44444 containers json从浏览器中 它不会加
  • /proc/PID 文件格式

    我想从中检索一些流程信息 proc目录 我的问题如下 中的文件是否有标准格式 proc PID 例如 有这个proc PID status文件与Name t ProcName在第一行 我可以在其他地方用空格代替这个文件吗 t或者类似的东西
  • Curl 和 Php 5.3.3 中的 SSL 连接错误

    我的网站自 3 年来一直运行良好 代码如下 现在突然从 2 天开始出现以下错误 SSL 连接错误 在 Curl error 中 下面是我的代码
  • 如何阅读shell命令的源代码?

    我想阅读编写linux命令的实际源代码 我已经获得了一些使用它们的经验 现在我认为是时候与我的机器进行更深层次的交互了 我在这里找到了一些命令http directory fsf org wiki GNU http directory fs
  • 如何从“git log”中查看 Git 中的特定版本?

    My git log显示为 enter code here git trial git log commit 4c5bc66ae50780cf8dcaf032da98422aea6e2cf7 Author king lt email pro
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock
  • 如何在两个不同帐户之间设置无密码身份验证

    我们可以在两台机器的两种不同用途之间设置无密码身份验证吗 例如 计算机A有用户A 计算机B有用户B 我们可以设置密码 ssh 以便计算机 A 上的用户 A 使用其用户帐户 A 登录计算机 B 谢谢你 如果我理解你的问题 你能设置一下吗ssh
  • Xenomai 中的周期性线程实时失败

    我正在创建一个周期性线程 它在模拟输出上输出方波信号 我正在使用 Xenomai API 中的 Posix Skin 和 Analogy 我使用示波器测试了代码的实时性能 并查看了方波信号 频率为 1kHz 的延迟 我应该实现 250us
  • 如何测试“If-Modified-Since”HTTP 标头支持

    使用 PHP 如何准确测试远程网站supports If Modified Since HTTP 标头 据我所知 如果您获取的远程文件自标头请求中指定的日期以来已被修改 它应该返回 200 OK 状态 如果尚未修改 则应返回 304 Not

随机推荐

  • CSP-S 模拟测试 51 题解

    考试过程 xff1a 惯例先看一遍三道题 xff0c T1 一开始反应要求割点 xff0c 但是这是有向图 xff0c 肯定不能求割点 xff0c 康了一下数据范围 xff0c 有40 是树的 xff0c 还不错 xff0c 决定待会在打
  • CSP-S 模拟测试57题解

    人生第一次A B层一块考rank2 xff0c 虽然说分差没几分 xff0c 但还是值得纪念 题解 xff1a T1 天空龙 xff1a 大神题 xff0c 因为我从不写快读也没有写考场注释的习惯 xff0c 所以不会做 xff0c 全hz
  • CSP-S 模拟53 题解

    题解 xff1a T1 u xff1a 一看到修改这么多 xff0c 但询问其实只有一个不难想到差分 xff0c 但是他这个形状可以说很不规则 xff0c 于是我们想到分别维护竖着的和斜着的差分 xff0c 然后最后合并即可 考场上瞎调了一
  • Springboot+Mybaits之两张表同时插入数据

    项目需求是 xff0c 一张表添加数据的同时 xff0c 另外一张表也需要添加数据 xff0c 话不多说 xff0c 直接上代码 1 Controller xff0c 我把两个DTO直接放到一个 64 RequestBody中 其中thro
  • 使用SQL创建唯一索引

    使用sql语句创建唯一索引 xff0c 格式如下 xff1a create unique index 索引名 on 表名 列名1 列名2 示例 xff1b 在表GoodsMade Labour的SID列上创建唯一索引IX GoodsMade
  • 解决cmd目录下pip命令不存在的问题

    解决cmd目录下pip命令不存在的问题 注 xff1a pip exe程序在Python安装目录下的scripts中 1 在cmd命令中输入 xff1a 先输入 xff1a python m ensurepip 再输入 xff1a pyth
  • linux报错Loading mirror speeds from cached hostfile解决方法

    首先本人当时也是遇到这个问题 xff0c 首先配置了虚拟机的 yum xff0c 移步这篇博客https www cnblogs com xuzhaoyang p 11239096 html 然后在进行了如下操作 首先还是最简单的 xff0
  • Git复习(六)之标签管理

    标签管理 发布一个版本时 xff0c 我们通常先在版本库中打一个标签 xff08 tag xff09 xff0c 这样 xff0c 就唯一确定了打标签时刻的版本 将来无论什么时候 xff0c 取某个标签的版本 xff0c 就是把那个打标签的
  • vr手机在哪能买_VR眼镜推荐(新手必看)好评性价比最高的几款VR眼镜推荐,VR眼镜那个好?那一款值得买?...

    耗时两个星期终于整理完这篇VR眼镜了 五年VR眼镜爱好者 xff0c 来讲一下自己的故事 xff0c 分享一下自己关于VR眼镜选购的一些心得 五年前的一次激动人心的VR体验 xff0c 让我彻底入坑了 记得那次我去朋友家玩 xff0c 他给
  • IDEA中设置Run Dashboard

    微服务项目的开发过程中 xff0c 工程会非常多 xff0c 经常要启动很多个服务 xff0c 才能完成一项测试 启动的多了 xff0c 容易开发者带来错乱的感觉 xff0c 很不方便管理 在idea作为开发工具时 xff0c 推荐一个很好
  • 雅士利处理器软件_Ashly 雅士利4.8SP数字音频处理器

    Ashly 雅士利 4 8SP 数字音频处理器 产品描述 美国ASHLY 雅士尼 Protea4 8SP是4段输入 8段输出数字信号处理器 xff0c 具有能够精确而又广泛的对音频进行控制的功能 通过前面板界面上的功能按钮 xff0c 允许
  • mysql错误码为1045_mysql错误代码1045的原因及解决方案

    mysql错误代码1045的原因及解决方案 mysql错误代码1045你的电脑会出现吗 xff1f 是什么原因导致的这个问题 xff1f 本文是小编精心编辑的 xff0c mysql错误代码1045的原因及解决方案希望能帮助到你 xff01
  • oracle 视图定时刷新,物化视图每天自动刷新2次的方法

    有用过ORCLE 物化视图的朋友 xff0c 请帮个忙 xff0c 我想每天刷新两次 xff0c 比如中午十二点 xff0c 晚上七点 xff0c 不知道怎么写 xff0c 急用 xff01 你这个需要 xff0c 可以这样实现 建一个表
  • 怎样删除计算机Windows7自带的游戏,win7自带游戏如何卸载?win7卸载自带游戏的步骤...

    安装win7纯净版32位系统后 xff0c 自带有一些小游戏 xff0c 比如游戏纸牌 扫雷等等游戏 平时很少玩到这些游戏 xff0c 放着会占用内存 那么win7自带游戏如何卸载 xff1f 其实卸载方法很简单 xff0c 大家只要阅读下
  • ipa文件包获取服务器地址,iOS获取App ipa包以及资源文件

    要获得线上APP的ipa文件 xff0c 现在有以下几种方案 1 通过PP助手下载安装到手机的应用 2 通过iTools助手下载安装到手机的应用 3 通过Apple Configurator 2 Mac商店 获取 前两种方案网上的教程很多
  • 华为服务器修改带外管理口,服务器带外管理地址

    服务器带外管理地址 内容精选 换一换 服务器上的ICAgent被卸载后 xff0c 会影响该服务器的日志采集能力 xff0c 请谨慎操作 xff01 云日志服务主机管理界面 xff0c 仅支持卸载安装在Linux环境中的ICAgent xf
  • [转]C++ 使用 curl 进行 http 请求(GET、POST、Download)的封装

    原文连接 xff1a https www cnblogs com oftenlin p 9478067 html CommonTools h CommonTools h Created on 2018年8月2日 Author didi in
  • [转]使用 curl 发送 POST 请求的几种方式

    HTTP 的 POST 请求通常是用于提交数据 xff0c 可以通过这篇文章来了解各种提交方式 xff1a 四种常见的 POST 提交数据方式 做 Web 后端开发时 xff0c 不可避免地要自己给自己发请求来调试接口 xff0c 这里要记
  • 人生进度条百分之20_人生进度条——27%

    嗨 xff5e 我们又见面啦 嘿 小吕这次有好多好多想要和你分享的东西 xff5e Part 01 人生进度条 假如我这一辈子有幸能活到75岁 xff0c 那我的人生就只有九百个月 从没仔细想过 xff0c 今年我20岁 xff0c 原来已
  • Linux用curl调用应用接口

    很多同学都用postman测试过后台应用接口 xff0c 的确非常方便 今天这里介绍一下在Liunx下用curl命令测试接口的方法和遇到的一些问题 xff0c 包括url传参转义和中文传参报错的问题 xff0c 这里都提供解决办法 下面我们