curl 是常用的命令行工具,用来请求 Web 服务器,它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。
可以看下阮一峰的博客:curl网站开发指南、curl 的用法指南
一、curl 常用开发总结
1、直接在curl命令后加上网址,就可以看到网页源码:curl www.sina.com
如果要把这个网页保存下来,可以使用`-o`参数,这就相当于使用wget命令了:curl -o [文件名] www.sina.com
2、自动跳转:有的网址是自动跳转的。使用`-L`参数,curl就会跳转到新的网址:curl -L www.sina.com
3、显示头信息:`-i`参数可以显示http response的头信息,连同网页代码一起:curl -i www.sina.com
4、显示通信过程:`-v`参数可以显示一次http通信的整个过程,包括端口连接和http request头信息:curl -v www.sina.com
如果你觉得上面的信息还不够,那么下面的命令可以查看更详细的通信过程。
curl --trace output.txt www.sina.com
curl --trace-ascii output.txt www.sina.com
5、发送表单信息
// 发送表单信息有GET和POST两种方法。
// GET方法相对简单,只要把数据附在网址后面就行。
curl example.com/form.cgi?data=xxx
// POST方法必须把数据和网址分开,curl就要用到--data参数。
curl -X POST --data "data=xxx" example.com/form.cgi
// 如果你的数据没有经过表单编码,还可以让curl为你编码,参数是`--data-urlencode`。
curl -X POST--data-urlencode "date=April 1" example.com/form.cgi
6、HTTP动词:curl 默认的HTTP动词是GET,使用`-X`参数可以支持其他动词。
curl -X POST www.example.com
curl -X DELETE www.example.com
二、curl 常用用法总结
-A
参数指定客户端的用户代理标头,即User-Agent
-b
参数用来向服务器发送 Cookie
-c
参数将服务器设置的 Cookie 写入一个文件
-d
参数用于发送 POST 请求的数据体
--data-urlencode
参数等同于-d
,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码
-e
参数用来设置 HTTP 的标头Referer
,表示请求的来源
-F
参数用来向服务器上传二进制文件
-G
参数用来构造 URL 的查询字符串
-k
参数指定跳过 SSL 检测
-L
参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向
-o
参数将服务器的回应保存成文件,等同于wget
命令
-O
参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名
-s
参数将不输出错误和进度信息
-S
参数指定只输出错误信息,通常与 -s
一起使用
-u
参数用来设置服务器认证的用户名和密码
-v
参数输出通信的整个过程,用于调试
--trace
参数也可以用于调试,还会输出原始的二进制数据
-x
参数指定 HTTP 请求的代理
-X
参数指定 HTTP 请求的方法
命令详解有很多,确实难以记住,网上一搜也大把资料,所以不多介绍了,需要用到的时候去查即可。我们需要知道的是应用场景方案
三、应用场景
1、应服务器安全限制,我们可以反过来让服务器去请求应用
今天遇到个需求,linux 上将 txt 文件导入数据库,需要监测 txt 中的数据是否完全导入了数据库,即 txt 中的行数是否和数据库中的行数是否一致的问题。
问题是获取 txt 行数需要执行 linux 指令,需要 java 代码知道 IP 端口 用户名 密码;线上安全问题,根本不允许java应用有这么大的权限。
经过指点,可以反过来,让 linux 上使用指令调用我的 java 应用即可,即使用 curl 指令调用java接口。
参考文章:linux通过curl方式调用接口 —— https://blog.csdn.net/h2604396739/article/details/83856711
评论:虽然不知道作者具体需求,但是这种反向思维的考虑,确实是值得学习了解的一种解决方案。