Linux下使用CURL模拟用户提交post表单

本文介绍在Linux下使用CURL命令提交post请求,在需要手动重复提交post表单时,使用本文介绍的方法可以达到事半功倍的效果。

事情是这样的:在只能借助以下的运维界面的情况下,要通过此界面提供的入口查找一批关键词。

Linux下使用CURL模拟用户提交post表单_第1张图片

关键词的格式是msgtype:xx,待查找的xx有几千条,在现场工程环境下,不知道任何相关的后台接口,如果没有合适的办法,那么只能一条条的手动查询,输入一个xx,然后点击确定进行检索。这是非常低效率的,也是非常痛苦的。

当这个问题抛到我这儿的时候,我想一定得想个办法,实现自动化的查找。经过一番思考后,想到了C++常用的Curl库,如果可以将界面下发的查询请求拼接成url,然后借助curl库,提交这个请求,接收并解析返回的响应,那不就可以实现自动的查找了吗?事实上,这是可以的,下文的思路也是基于此,但是下文中并不是使用C++的curl库来实现提交post请求。而是借助Linux的curl命令,这时只要几行脚本,就可以实现了,但是要确保安装了Linux下curl命令是可用的。

Curl命令提交post请求,简介:
通过脚本发送post请求:
curl -d {Request parameter} {Request URL}

通过脚本发送post请求,顺便附带文本数据,比如通过浏览选择本地的post.txt并上传发送post请求
curl -F “[email protected];type=text/plain” {post请求的url}

现在要解决的是怎样获得post请求的实际参数,以及请求的实际地址了!
在Chrome浏览器下按下F12(或者选项 更多工具->开发者工具),不妨通过上述界面下发一个请求,然后再Network标签中找到该POST请求,并点击进入查看请求的详情(在此,仅列出主要参数):

Remote Address:192.168.XX.XX:8088
Request URL:http://192.168.XX.XX:8088/search  //这是本次post请求的实际地址
Request Method:POST
Status Code:200 OK

Response Headers
view source
Content-Type:application/json;charset=UTF-8
...


Request Headers
view source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
...

//以下是本次下发请求的主要参数
queryWord:msgtype:1
similarText:
startTime:2017-03-30 19:27:33
endTime:2017-04-03 19:27:33

据此,这条请求如果使用curl提交的话,应该为:
因此 curl命令的相关参数为
curl –d “queryWord=msgtype:1&startTime=t1&endTime=t2” “http:// 192.168.XX.XX:8088/search”
t1对应于startTime:2017-03-30 19:27:33的绝对秒(自行转换)
t2对应于endTime:2017-04-03 19:27:33的绝对秒

那么实践中只要使用脚本将msgtype后面跟的参数替换为其他消息类型即可实现”自动化”提交表单了,至于返回的json格式的结果,可以暂存,并不做解析,因为解析返回的响应并不是这儿的重点。(shell脚本只要不到10行就可以完成,将这些请求参数以行为单位存到文本中,按行读取文本,替换msgtype后的参数值)

在实际中遇到这种单调重复的问题还是要多想办法!不到万不得已,不使用蛮力!

你可能感兴趣的:(shell,C++)