shell(wget)模拟浏览器登录认证并下载文件

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 选项只能有一个







  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值