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

news2024/12/24 11:34:47

文章目录

    • @[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://www.coloradmin.cn/o/905344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习最强奠基作ResNet《Deep Residual Learning for Image Recognition》论文解读(上篇)

1、摘要 1.1 第一段 作者说深度神经网络是非常难以训练的&#xff0c;我们使用了一个残差学习框架的网络来使得训练非常深的网络比之前容易得很多。 把层作为一个残差学习函数相对于层输入的一个方法&#xff0c;而不是说跟之前一样的学习unreferenced functions 作者提供了…

【算法刷题之链表篇(1)】

目录 1.leetcode-82. 删除排序链表中的重复元素 II&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;方法及思路&#xff08;一次遍历&#xff09;&#xff08;3&#xff09;代码实现 2.leetcode-19. 删除链表的倒数第 N 个结点&#xff08;1&#xff09;题目描述&a…

push github

一、生成密钥 打开git bash执行下面指令&#xff0c;Enter下一步Enter下一步..生成ssh key 密钥&#xff1b; ssh-keygen -t rsa 二、 复制公共密钥到git hub 登录github&#xff0c;在选项setting >> SSH and GPG key >> add new ssh添加刚才的公钥地址即可 验证…

大数据-玩转数据-Flink营销对账

一、说明 在电商网站中&#xff0c;订单的支付作为直接与营销收入挂钩的一环&#xff0c;在业务流程中非常重要。对于订单而言&#xff0c;为了正确控制业务流程&#xff0c;也为了增加用户的支付意愿&#xff0c;网站一般会设置一个支付失效时间&#xff0c;超过一段时间不支…

Codeforces Round 890 (Div. 2) E2. PermuTree (hard version) (主席树/树状数组/差分+前缀和)

题目 有一个初始为空的数组&#xff0c;你需要处理q(q<1e6)次操作&#xff0c;操作分四种&#xff1a; ① x&#xff0c;数组后面加一个新的数x ② - k&#xff0c;删掉数组最后面的k个值 ③ !&#xff0c;回滚最后一次变更&#xff08;只有①操作和②操作视为变更&…

Leetcode刷题之快乐数

题⽬描述&#xff1a; 算法原理: 为了⽅便叙述&#xff0c;将「对于⼀个正整数&#xff0c;每⼀次将该数替换为它每个位置上的数字的平⽅和」这⼀个 操作记为 x 操作&#xff1b; 我们做这道题可以参考环形链表:142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09;…

在线HmacSHA224加密工具--在线获取哈希值又称摘要

具体请前往&#xff1a;在线计算HmacSha224工具

Internet Download Manager2023下载器最新中文版本功能

对于idm相信大家都不陌生&#xff0c;全称是Internet Download Manager。idm是一款非常经典、功能强大的Windows文件多线程下载加速软件&#xff0c;在电脑用户中口碑极好&#xff0c;被称为必装的HTTP下载神器。 1、idm既是下载器&#xff0c;也是加速器&#xff0c;可以提升…

next.js 创建 react ant design ts 项目

环境说明&#xff1a;next.js 官方文档要求node版本在16.8以上。笔者使用的 node版本是16.20.1&#xff0c;不要使用16.13.0&#xff0c;笔者在使用 node16.13.0环境时创建的 react 项目点击事件无效 next.js官网截图 next.js 官网&#xff1a;https://nextjs.org/ react 官网…

个人信息保护影响评估(PIA)怎么做?解发条件、实施步骤、操作指南

个人信息保护一直是人们关注的热点话题&#xff0c;互联网、人工智能、大数据等新兴技术的快速发展极大地增强了入侵个人信息的能力&#xff0c;对个人信息的随意收集、违法获取、过度使用、非法买卖、泄露等问题引起了全球各国的普遍关注。同时随着用户的个人信息保护意识的逐…

Flask模型部署教程?

如何使用Flask框架来部署机器学习模型&#xff1f;Flask是一个轻量级的Python Web框架&#xff0c;它非常适合用于将机器学习模型部署成实际应用。 什么是Flask&#xff1f; Flask是一个Python Web应用框架&#xff0c;它允许轻松地构建Web应用程序。它被广泛用于构建各种Web…

基于Java+SpringBoot+Vue的校企合作项目管理系统【源码+论文+演示视频+包运行成功】

博主介绍&#xff1a;✌擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案…

代码随想录(八):贪心算法

文章目录 455.分发饼干376. 摆动序列53. 最大子数组和122. 买卖股票的最佳时机 II55. 跳跃游戏1005. K 次取反后最大化的数组和134. 加油站860. 柠檬水找零135. 分发糖果406. 根据身高重建队列 455.分发饼干 题目链接 C代码&#xff1a; class Solution { public:int findCo…

在Windows下安装PhantomJS和CasperJS及入门介绍(上)

近在使用Python爬取网页内容时&#xff0c;总是遇到JS临时加载、动态获取网页信息的困难。例如爬取CSDN下载资源评论、搜狐图片中的“原图”等&#xff0c;此时尝试学习Phantomjs和CasperJS来解决这个问题。这第一篇文章当然就是安装过程及入门介绍。 一. 安装Phantomjs 下载地…

SWUST派森练习题:P118. 数组接雨

描述 给定一个整形数组​​arr​​**&#xff0c;已知其中所有的值都是非负的&#xff0c;将这个数组看作一个柱子高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。​​(​​数组以外的区域高度视为​0)** 数据范围&#xff1a;数组长度​​** 0≤n≤…

wustojc2010两小时学完C语言

#include <stdio.h> int main() {int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("%d",a-b*c);return 0;}

AUTOSAR规范与ECU软件开发(实践篇)4.5在Simulink中导入软件组件描述文件——“自上而下”的工作流程

“自上而下”的工作流程有别于“自下而上”的工作流程,其需要先在AAT(AUTOSAR Authoring Tool)工具(如ISOLAR-A)中完成软件组 件框架设计,并将软件组件arxml描述文件导入Matlab/Simulink完成内部 算法的实现,然后再通过Matlab/Simulink生成符合AUTOSAR规范的代 码及arxm…

js 获取页面的滚动高度

想要获取页面的滚动位置可以通过给window绑定滚动事件来实现。 window.addEventListener(scroll,()>{const n document.documentElement.scrollTopconsole.log(n);}) 通过该方法可以获取页面的当前位置&#xff0c;或者实现其他的效果&#xff0c;例如电梯导航

v-model原理

v-model本质上是一个语法糖&#xff0c;应用在输入框上&#xff0c;就是value属性 和input事件的合写 作用:提供数据的双向绑定—实现子组件 和父组件数据的双向绑定 数据变 视图跟着变 :value视图变 数据跟着变 input <input type"text" v-model"msg"…

漏洞指北-VulFocus靶场专栏-中级01

漏洞指北-VulFocus靶场专栏-中级01 中级001 &#x1f338;dcrcms 文件上传 &#xff08;CNVD-2020-27175)&#x1f338;step1&#xff1a;输入账号 密码burp suite 拦截 修改类型为 jpeg 中级002 &#x1f338;thinkphp3.2.x 代码执行&#x1f338;step1&#xff1a;burpsuite …