PS:最近本人在做一个JAVAWEB网站,有一个需求是这样:把生产出来的食品送去实验室进行检测,根据实验室数据判断食品是否合格,但是一个食品检测项目可能会有很多项,一样一样输入很麻烦,只能导入Excel,但是实验室那边不给开接口,只能手动登录网址并根据筛选条件进行下载,所以本人就写了一个shell脚本让服务器自动去下载并导入系统
话不说直接上干货
示例一、
#!/bin/bash
#目的:抓取实验室数据
#缓存文件所在目录
dir=/var/ys/
#下载文件所在目录
download=/var/ys/
#当前系统的昨天时间
yestoday=`date +"%F" -d "-1 days"`
#定义下载参数
args=""
#用户名
username=""
#密码
passwd=""
#数据类型A=创建时间B=收样时间D=登记时间E=审核时间
args="${args}&objDate.dateType=E"
#开始时间(昨天)
args="${args}&objDate.beginDate=${yestoday}"
#结束时间(昨天)
args="${args}&objDate.endDate=${yestoday}"
#机构名称(技术中心:31000024,食品中心:31000020)
args="${args}&objResultMain.testOrgName=食品中心"
args="${args}&objResultMain.testOrgCode=31000020"
#升序降序
args="${args}&sord=asc"
#时间戳
nd=`date +%s`
args="${args}&nd=${nd}"
#固定参数
args="${args}&objResultMain.isValid=Y"
args="${args}&objResultMain.isPause=N"
args="${args}&objResultMain.objSample.objProject.col3=N"
args="${args}&_search=false"
args="${args}&rows=50"
args="${args}&page=1"
args="${args}&sidx=dueDate"
#登录并验证
wget --post-data="username=$username&password=$passwd" --save-cookies=${dir}cookie.txt --keep-session-cookies http://10.10.6.100/login.do
#查询并得到下载地址(食品中心)
wget -O "${dir}url.txt" --load-cookies=${dir}cookie.txt --post-data="${args}" http://10.10.6.100/mgrResultMain.do?method=exportResult
#解析下载地址;如:{"success":true,"data":"http://10.10.6.100/temp/transient/resultMain1517811745451.xlsx"}
url=`cat ${dir}url.txt|sed 's/{//g'|sed 's/}//g'|sed 's/"//g'|cut -d ',' -f 2|cut -d ':' -f 2,3`
#下载
wget -O "${download}spzx${nd}.xlsx" --load-cookies=${dir}cookie.txt ${url}
#将食品中心换成技术中心及机构代码
nd2=`date +%s`
args=`echo ${args}|sed 's/食品中心/技术中心/g'|sed 's/31000020/31000024/g'|sed "s/${nd}/${nd2}/g"`
#查询并得到下载地址(技术中心)
wget -O "${dir}url.txt" --load-cookies=${dir}cookie.txt --post-data="${args}" http://10.10.6.100/mgrResultMain.do?method=exportResult
#解析下载地址
url=`cat ${dir}url.txt|sed 's/{//g'|sed 's/}//g'|sed 's/"//g'|cut -d ',' -f 2|cut -d ':' -f 2,3`
#下载
wget -O "${download}jcjszx${nd2}.xlsx" --load-cookies=${dir}cookie.txt ${url}
#删除缓存文件
rm -rf ${dir}*.do ${dir}*.txt
示例二、
#!/bin/bash
#缓存所在目录
dir=/opt/shell/
#当前系统时间
curdate=`date +\%F`
#认证
wget --post-data="user.userLoginName=zhouyu&user.userPassword=0" --save-cookies=${dir}cookie.txt --keep-session-cookies http://192.168.11.13:8181/AA/shlogin.action
#下载(注意此文件不是静态文件需要,需要给其指定文件扩展名并与真实下载的扩展名一致,如xls就保存到.xls文件不能保存到.xlsx文件)
wget -O ${dir}${curdate}.xls --load-cookies=${dir}cookie.txt http://192.168.11.13:8181/AA/tjbb/exportAllLicensenInfo.action
#删除文件
rm -rf ${dir}*.txt ${dir}*.action
一、shell的核心命令
wget
二、用到的参数说明
--load-cookies=FILE 在开始会话前从文件 FILE 中加载cookie
--save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中
--keep-session-cookies 和 --save-cookies 一起使用
三、wget常用的参数说明
--http-user=USER 设定HTTP用户名为 USER
--http-passwd=PASS 设定HTTP用户名为PASS,如果Web服务器需要指定用户名和口令,用这两项来设定;
--proxy-user=USER 设置代理用户
--proxy-passwd=PASS 设置代理密码,如果代理服务器需要输入用户名和口令,使用这两个选项;
--no-cache 不允许服务器端的数据缓存
-E, --html-extension 将所有text/html文档以.html扩展名保存
--ignore-length 忽略服务器发来的 `Content-Length' 头域
--header=STRING 在headers中插入字符串 STRING
--referer=URL 在HTTP请求中包含 `Referer: URL'头
-s, --save-headers 保存HTTP头到文件
-U, --user-agent=AGENT 设定 User Agent 的名称为AGENT而不是默认 Wget/VERSION
--no-http-keep-alive 不使用 HTTP 持久链接
--no-cookies 不使用 cookies.
--load-cookies=FILE 在开始会话前从文件 FILE 中加载cookie
--save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中
--keep-session-cookies 和 --save-cookies 一起使用
--post-data=string
--post-file=file 使用POST方法提交 STRING 或 FILE 内容(若string太长可用file来缩短命令行长度)。FILE 只能是普通文件;特殊字符使用 percent-encoding;--header 可有多条,但 --post 选项只能有一个