菜鸟笔记
提升您的技术认知

Curl命令POST请求

curl工具介绍:

       CURL是一个利用URL语法在命令行下工作的文件传输工具,被广泛应用在Unix、Linux发行版中,并且有DOS和Win32、Win64的移植版本。同时它还支持诸多的通信协议(我们常用的有HTTP、HTTPS、FTP、SMTP、TELNET等)。

       我们可以使用它进行HTTP POST、HTTP PUT、FTP上传、cookies、用户认证、IP代理、网页下载等常用功能。

本文重点:

       本文主要对curl功能中的HTTP POST进行介绍,主要用于在linux环境下进行接口测试或现场联调。(在windows环境下,我们可以采用postman等请求工具代替)

坑点:

windows下的curl工具,在引号,中文等问题上,有很多坑,建议使用linux下的curl。

常见curl POST请求示例:

1. 请求参数为json数据

curl -i -H "Content-Type:application/json" -X POST -d '{"XXX":"xxx"}' http://localhost:18080/test

2.请求参数为表单数据

curl -i -d "symbol=sz000001&scale=5&ma=5&datalen=1" -X POST http://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData

常用命令选项解释:

         上面请求示例中的 -i 是为了获取返回的请求头信息。如图

        

-i 、-I (大写i)、-v 的作用有相同之处。

-v是verbose的意思,意为啰嗦的,唠叨的,它能输出整个请求过程,请求头,响应头,响应结果等一系列信息。

-i 是include的意思,返回响应结果的同时返回响应头。

-I 是 仅返回响应头

-----------------------------------------------------------------------------------------------------------------------------------------

-H 是header的意思,可以自定义要发送到服务端的请求头。如-H "Content-Type:application/json"

-X (大写x)表示使用指定的请求方式。如果不清楚默认请求方式时建议指定请求方式。如 -X POST

-d 表示data,表示请求的数据,如 -d  {\"XXX\":\"xxx\"} 

windows下注意点(linux忽略):

1. json格式的数据需要进行转义,转成字符串的形式。如果请求参数为 -d  '{"XXX":"xxx"}' 有时会报400,bad request,后台无法接受数据,需转义为 "{\"XXX\":\"xxx\"}" 的格式。

说“有时“的原因是我用windows下的curl工具执行:

curl -i -H "Content-Type:application/json" -d '{"order":"201904171408425095"}' http://192.168.149.71/test

报400错误,同样的命令在linux下执行,正确。所以在测试命令的时候,建议在linux下的curl执行。

2.如果json数据包含中文,可以采用json文件的形式 (在windows下有这个问题,在linux下测试,不需要对中文处理也行)

curl -i -H "Content-Type:application/json;charset=utf-8" -X POST -d @itemdata.json  http://localhost:18080/test

itemdata.json是curl的bin目录的文件,文件中的json为正常json。或者将要传的中文转换为base64的格式替换。

拓展:

1、IP代理,在对方服务器把你IP屏蔽掉时用。

curl -x 10.10.90.83:80 -o home.html http://www.sina.com.cn

-x (小写x) 相应的代理IP。 -o filename 表示将目标网页下载到filename的路径下,仅有名字表示的根目录下,一般在curl的bin目录下。