curl 模拟登陆后携带 Cookie 进行 POST 提交报文

Posted catoop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了curl 模拟登陆后携带 Cookie 进行 POST 提交报文相关的知识,希望对你有一定的参考价值。

场景

某路由器设备,里面有一个功能,只能进行 “手工同步” ,但是我需要它自动进行 “自动的不断同步”。所以我写了一个脚本,先模拟登陆,然后将获得的cookie携带模拟这个手工同步请求。最后再将这个脚本配置到定时任务中每隔30秒钟执行一次。

脚本示例

#!/bin/bash
# 登陆账号
username=admin
# 登陆密码
password=1234567890000000

# 下面的规则你需要修改(我这个登录是对密码进行md5的,所以进行了md5处理)
password_md5=$(echo -n $password | md5sum | cut -d ' ' -f 1)
password_base64=$(echo -n "salt_11${password}" | base64)
#echo $password_md5
#echo $password_base64

# 登录的POST报文体
login_body='{"username":"'${username}'","passwd":"'${password_md5}'","pass":"'${password_base64}'","remember_password":""}'

# curl 提交登录请求,并将 cookie 存储到文件
curl -X POST -d $login_body "http://192.168.100.2/Action/login" -c ck.txt

# 构造业务请求的报文体
sync_body='{"func_name":"vrrp_config","action":"websync","param":{"modules":"dhcp_server,dhcp_lease,dns,dns_replace,ipgroup,macgroup,wifi,static_rt,static_rt_table,vlan,pptp_client,l2tp_client,openvpn-client,ipsec-vpn,upnpd,upnpd_leases,snat,dnat,netmap,ipv6,dprotos,dprotos_l7,simple_qos,mac_qos,lb_pcc,stream_layer7,stream_ipport,stream_domain,stream_updown,ac_status,ac_server,ac_group,ac_upgrade,wls_black,ac_online_clt,pppoe_server,pptp_server,l2tp_server,openvpn-server,ppp_package,pppuser,ppp_passwd,ppp_paylog,coupon,notice_temp,notice_cycle,notice_remind,notice_expires,audit,audit_white_ip,audit_white_mac,mac_comment,audit_url_log,audit_im_log,audit_terminal_log,acl_mac,url_black,domain_blacklist,domain_group,url_redirect,url_keywords,url_replace,acl_l7,acl_l2route,acl_qq,acl,arp,conn_limit,advanced"}}'

# 携带登录的 cookie 提交请求
curl -X POST -b ck.txt -d $sync_body "http://192.168.100.2/Action/call"

这个脚本如果你是在设备本身上定时执行的,建议把IP地址 192.168.100.2 修改为 127.0.0.1,如果是在其他设备执行的,则需要像示例中那样明确具体的 IP 地址。


(END)

以上是关于curl 模拟登陆后携带 Cookie 进行 POST 提交报文的主要内容,如果未能解决你的问题,请参考以下文章

PHP CURL模拟登陆

JAVA--利用HttpClient模拟浏览器登陆请求获取响应的Cookie

php爬虫(curl) 模拟登陆获取cookie,然后使用cookie查看个人中心

php模拟登陆知乎

怎样用php中的curl模拟登陆

PHP通过CURL模拟登录并获取数据