上一节测试题目
上一节测试题目都是将那些命令自己手动测试下。
curl 命令
curl命令是可以完成http和https协议的GET、POST、PUT等http请求的命令行工具,并且支持对请求设置代理。功能非常强大,可以用它来做linux的爬虫。由于今天我们不是主要介绍curl命令,所以我们只简单说下curl命令的GET请求。
用curl 发送GET请求
先看下命令:
curl -s http://ip.taobao.com/service/getIpInfo.php?ip=223.5.5.5
上面这个命令,就是向http://ip.taobao.com/servicce/getIpInfo.php发送http的get请求,并且带有参数ip=223.5.5.5。执行命令后显示的结果就是返回的查询结果,其中-s参数是不显示进度日志。
返回的json数据
看上图可以看到ip.taobao.com给我们返回的数据是json格式(一种数据存储格式)的,我们要想看具体的地理位置需要对此数据进行处理分析,将地理位置筛选出来。所以,需要将这些输出交给一个jq工具进行处理。那么如何将数据交个jq呢?用|管道符就可以将curl的结果转交给jq。
|管道符
| 这个竖线符合,在linux下有特殊意义,它就是管道符号。
什么是管道
我们如果把linux下的命令都比喻成一个净水器的滤芯,它们分别可以过滤水中不同的杂质,那么管道符合就相当于连接两个滤芯的水管。而这个水管内运送的水,就代表上一个滤芯的标准输出,由管道将此标准输出送给下一个滤芯。然后这些水作为下一个滤芯的标准输入。
下面我们来简单演示下,先用vim test创建并编辑文件并输入下面内容:
hello wrold
hi 52robot.org
用cat命令可以查看文件内容
#cat 命令可以将文件内容输出的终端
cat test
用grep可以查找test文件含有52robot字符的行,并且在终端输出
grep "52robot" test
上面我门了解了cat和grep命令,现在我们就可以用|将他们连接起来。
cat test| grep "52robot"
这个操作是先有cat命令将test文件的内容放到标准输出,然后通过管道符合|传给grep作为它的标准输入,这样grep命令最后也就不用再写文件名了。
发送请求并处理数据
上面我们了解了管道符,下面我们用将curl的结果交给jq试下:
curl http://-s ip.taobao.com/service/getIpInfo.php?ip=223.5.5.5|jq '.'
对json数据解析
这里我们简单介绍下jq怎么提取json里面的部分字段:
我们把json的数据理解成一个树状结构的一个字典,其中.代表这个最顶级的一个字典。而
.data代表json里面data关键字对应的键值;.data.country代表上文结果的中国;.data.region代表上文的浙江省;.data.city代表上文的杭州市。
下面我们再来试试:
# 用+ 号可以将多个字段合并
curl -s http://ip.taobao.com/service/getIpInfo.php?ip=223.5.5.5|jq '.data.country + .data.region + .data.city'
只显示json的国家、省和市字段
可以看到这个结果这就是我们想要的地理位置,它包括了国家、省、市。
本节测试
自己尝试改改输出,可以将所属区域和网络接入运营商也加入的查询的结果。
下一节预告
下节我们会将本节的这个命令写入脚本,让它支持传入IP参数,并同时可以直接作为系统命令来调用。
关注我们了解更多原创文章
52Robot社区-二维码.jpg









网友评论