使用shell脚本批量curl调用接口

news/2024/7/3 2:37:16

文章目录

    • @[toc]
  • 1. 批量调用接口的方式
    • 1.1)方式一:业务代码 + curl
    • 1.2)方式二 : shell + curl
  • 2.curl和wget的使用
    • 2.1)wget
    • 2.2) curl
      • 2.2.1) curl发送POST请求
      • 2.2.2) curl发送GET请求
      • 2.2.3) 参数有其他类型
  • 3. shell脚本
  • 4. 从windows到linux的shell脚本编码和格式
    • 4.1) 设置模式
    • 4.2) 查询编码
    • 4.3) 转换编码
    • 4.4) 显示指定编码
  • 5. 总结

1. 批量调用接口的方式

  上一篇文章数据同步后数据总条数对不上的问题解决

  文章结尾留下了一个小小的悬念,

  问题是:如何批量删除redis中的用户信息?
  这种问题最简单粗暴的方式是直接删除那个库或者那个类型前缀的keys,但是是生产环境,不是测试环境,测试环境的话可以随便搞,生产环境还是的小心,可以在凌晨用户不活跃的时候清楚reids的库,清除reids的相关的用户数据,登录的时候检测到access_token过期会重新去走登录流程获取access_token,登录是基于springSecurity+oauther2.0实现的一套搞所有的认证授权的功能,用户信息过期会被打回登录页重新去认证授权登录,那种简单粗暴的方式直接删库的方式会给用户带来不好的体验,所以还是得使用其它稳妥的方式来解决这个问题。

  假设用户相关信息存入redis中的key是如下格式,%s拼接的是用户的uid

String USER_REDIS_KEY = "member:info:openid:%s:unionid:%s";

  首先需要把需要删除的用户的uid对应的相关数据找出来,将对应的数据存入数据库或者是文件中

1.1)方式一:业务代码 + curl

  这种方式是将对应的数据存入数据库,写一个rest风格的接口,使用curl来触发接口执行批量删除redis的用户数据,这种方式就略过了。

1.2)方式二 : shell + curl

  这种方式把需要删除的用户的openid、unionid参数放在一个txt的文件中,通过shell读取这个文件,解析组装curl的接口参数进行后端接口的方法调用,进行批量删除用户信息的操作。

  上面的两种方法的思路大致的讲解了下,也很简单的,具体的实现就不做过多的分享,so easy!

2.curl和wget的使用

  常用命令使用积累如下,还有很多丰富的参数可以加,可以上网参考学习,这个里只是记录工作中常见的用法使用分享记录

2.1)wget

  使用wget断点续传下载一个网络上的mp3文件到本地,命令如下:

sudo wget ":"http://xxxxxx:8080/download/record?id=eyJrZXkiOiJiSExIMkkybl9ERF9EWVRaIiwiYWxnIjoiSFMyNTYifQ.eyJyZWNvcmRpbmdVUkwiOiJodHRwOi8vMTIxLjMxLjI1NS4xNzoxMjMwMS9WMi8yMDIxMTAxOTE0MzgwOS9IV05ZXzQ0NjE2ZTY3ZDEwMmZiNTFfMTg4NDk4NTQ1OTZfMTU4ODc0MTAzMTdfMjAyMTEwMTkxNDM4MDkubXAzIiwicmVjb3JkaW5nSWQiOiI0NDYxNmU2N2QxMDJmYjUxIiwiZXhwIjoxNjM0ODg0ODI0fQ.X_pp0VA7lagk9z8uQS8VKSC6dWfqR4gbyaL0USKSZ6k -c -O 123.mp3

2.2) curl

2.2.1) curl发送POST请求

参数内容

-H 请求头

-d POST内容

-X 请求协议

curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://xxxxx:8001/test"

2.2.2) curl发送GET请求

参数都是字符串:

curl -H "Content-Type: application/json" -X GET "http://xxxx:8080/wxpay/wechatPay/billQuery?billDate=20220208&appId=wx7a834121bd13a024&channelCode=WECHAT_MINI_PAY&businessId=6"

2.2.3) 参数有其他类型

  如下代码的一个参数是Long类型和BigDecimal类型的参数,只要不是字符串的参数,都需要如下处理,在参数的前面加上

 --data-urlencode //url参数转义处理

  比如有如下一个接口:
在这里插入图片描述

  这个也是很坑的点,我也是上网查了好久才知道要这种干的,所以记录,下次需要了直接这种梭哈了:

curl -X GET -G --data-urlencode "orderId=2222400000007" --data-urlencode "amount=5.00" --data-urlencode "remark=测试退款" --data-urlencode "operateName=zlf" -i http://xxxx:8080/park/order/pkRefund

  下面三种都是错误的:

curl http://xxxx:8080/park/order/pkRefund?orderId=2222400000007&amount=5&remark=测试退款&operateName=zlf

curl “http://xxxx:8080/park/order/pkRefund?orderId=2222400000007&amount=5&remark=测试退款&operateName=zlf”

curl -X GET “http://xxxx:8080/park/order/pkRefund?orderId=2222400000007&amount=5&remark=测试退款&operateName=zlf”

3. shell脚本

  a.txt的内容如下:

openid1 unionid1
openid2 unionid2
openid3 unionid3
.................
openidn unionidn

  a.txt的每一行的openid和unionid的值中间用空格隔开,shell解析读取一行,根据这个空格来解析参数的,脚本文件名a.sh

#!/bin/bash
url=$1
while read line
do
#echo $line
OLD_IFS="$IFS"
array=($line)
a=${array[0]}
b=${array[1]}
echo "$a"
echo "$b"
echo  "${url}/${a}/${b}"
curl  "${url}/${a}/${b}" # 这里使用GET或POST都可以,关键就是传参、解析拼装请求参数,然后调用接口
#echo "successfully"
done<a.txt

  给文件授权和执行:

chmod 777 a.txt a.sh
./a.sh http://127.0.0.1:8080/delRedisUserInfor/

4. 从windows到linux的shell脚本编码和格式

  从windows到linux的shell脚本编码和格式问题

  异常问题 :set ff=unix
  启动脚本在启动时报错比如执行sh start.sh,时会报Command not found等等的错误,因为我们在windows编写或修改后的脚本是dos编码,而正常的在Linux系统中执行的是unix编码,在写shell脚本的时候,在windows的上开发后,上传到服务器,可能会有文件格式不正确,通过:set ff unix可以将dos格式设置为unix下的文件格式.

  解决方法:则在配置文件中非编辑模式中输入:

ff是fileencoding的简写,如下ff也可以写成fileencoding

#查看模式
:set ff

#修改模式
:set ff=unix

#保存
:wq

4.1) 设置模式

  #查看模式,查看当前文本的模式类型,一般为dos,如果是dos需要修改为unix,否则linux运行文件错误

:set ff

#修改模式
:set ff=unix

#保存
:wq

4.2) 查询编码

#查询编码
:set fileencoding

4.3) 转换编码

#转换当前文本的编码为指定的编码,这里的“编码”常见为gbk utf-8 big5 cp936

#设置编码
:set fenc=编码            #比如下面的,注意要:w保存一下,

#设置UTF-8
:set fenc=utf-8

#保存
:wq!

4.4) 显示指定编码

#以指定的编码显示文本,但不保存到文件中。

#这里的“编码”常见为gbk utf-8 big5 cp936

:set enc=编码 #比如:

:set enc=utf-8

:%s/^M//g 这里是如果文本里面有^M结尾的话用此命令。

5. 总结

  这也是一个总结做一个记录和分享,不然每次都得去现写和查,有点浪费时间的,所以我的分享希望对你有帮助,请一键三连,么么哒!


http://lihuaxi.xjx100.cn/news/1465355.html

相关文章

基于protobuf和httplib的在线通讯录项目框架|Protobuf应用小项目

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/categ…

YOLOv5、YOLOv8改进:SOCA注意力机制

目录 简介 2.YOLOv5使用SOCA注意力机制 2.1增加以下SOCA.yaml文件 2.2common.py配置 2.3yolo.py配置 简介 注意力机制&#xff08;Attention Mechanism&#xff09;源于对人类视觉的研究。在认知科学中&#xff0c;由于信息处理的瓶颈&#xff0c;人类会选择性地关注所有…

cuOSD(CUDA On-Screen Display Library)库的学习

目录 前言1. cuOSD1.1 Description1.2 Getting started1.3 For Python Interface1.4 Demo1.5 Performance Table 2. cuOSD案例2.1 环境配置2.2 simple案例2.3 segment案例2.4 segment2案例2.5 polyline案例2.6 comp案例2.7 perf案例 3. cuOSD浅析3.1 simple_draw函数 4. 补充知…

dockerfile编写LNMP

目录 1. 项目环境 2. 服务器环境 二、部署nginx&#xff08;容器IP为192.168.158.26&#xff09; 1、整个Dockerfile文件内容 ​编辑 2、配置nginx.conf文件 3、构建镜像 三、部署mysql 1、整个Docker文件内容 3、生成镜像 4、启动镜像容器 5、验证mysql 四、PHP部署 1…

vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件

文章目录 ⭐前言⭐react 组件传值实例&#x1f496;父组件传值给子组件&#xff08;props&#xff09;&#x1f496;子组件传递事件给父组件props绑定事件&#x1f496;父组件触发子组件的事件Ref ⭐vue3 组件传值实例&#x1f496; 父组件传递数据给子组件props&#x1f496; …

达梦数据库权限和预定角色介绍

概述 本文对达梦数据库数据库和对象权限及DM预定义角色及角色创建进行介绍。 1.权限管理 用户权限有两类&#xff1a;数据库权限和对象权限。 数据库权限主要是指针对数据库对象的创建、删除、修改的权限&#xff0c;对数据库备份等权限。 数据库权限一般由 SYSDBA、SYSAU…

视频局部区域移动检测, 删除相似帧

视频局部区域移动检测, 删除相似帧 完整方案在本文最后, 不想听故事的直接跳转到完整方案即可 起因 老板的一个东西找不到了, 让查监控 场景 东西放在一个架子上, 由一个海康威视全天候录像的摄像头监控, 但是巧就巧在这个要找的东西被放在了摄像头的死角里, 正好被柜子的隔…

情报与GPT技术大幅降低鱼叉攻击成本

邮件鱼叉攻击&#xff08;spear phishing attack&#xff09;是一种高度定制化的网络诈骗手段&#xff0c;攻击者通常假装是受害人所熟知的公司或组织发送电子邮件&#xff0c;以骗取受害人的个人信息或企业机密。 以往邮件鱼叉攻击需要花费较多的时间去采集情报、深入了解受…