实际工作中不时会遇到需要在服务器上临时请求一个url,看下这个url返回的数据是否正常或者查看一些http响应头信息,以验证自己临时一个想法,这时候如果还从服务器切换到桌面,再打开浏览器,输入url,F12...就显得特别繁琐,会打断这种工作的「连续性」。
还好,linux下我们可以通过
curl
这个命令来模拟浏览器发起一次请求,然后得到和提取数据。
下面看示例,发起一次get请求,查看北京市的经纬度(返回json数据):
[od]$ curl -XGET "http://gc.ditu.aliyun.com/geocoding?a=北京市"
{"lon":116.40752,"level":1,"address":"","cityName":"","alevel":4,"lat":39.90403}
上面,-XGET
是可以省略的,默认就是get方式。其它常见参数还有-XPOST,-XPUT,-XDELETE
X后面可以有空格,例如-X GET
如果我们发起请求时候,需要携带参数呢?
get方式还好说,参数直接在url后面用?
拼接就行。那POST的方式呢,如何提交数据,这时候就要用curl -X POST -d "a=上海市" "http://gc.ditu.aliyun.com/geocoding"
这种带-d "a=上海市&b=xxx"
的方式携带数据了。
但我们都知道,实际中post方式提交内容都非常多且复杂,例如一个包含商品及用户各种信息的表单,如果用上面那种拼接参数方式,linux下换行一不小心就会出问题。这时候我们可以用这种方式curl -X POST -d @./param.txt "http://gc.ditu.aliyun.com/geocoding"
也就是在 -d
参数后面 用@文件
方式,把一个文件中内容作为POST数据提交,非常方便。当然,实际中这个文件可能是另一个命令输出的结果,不要然还不如在浏览器中用post方式提交。
curl 还有一堆参数,只需要知道有这个功能就行,用的时候能反映上来,提供一种思路上的拓展就行。
例如,
curl -i
可以看到http响应头的信息。curl -L
有的网址是自动跳转的。使用-L
参数,curl就会跳转到新的网址。curl -H "name:value"
设置http请求头数据curl -o result
将url返回的结果保存到文件result中