前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux中curl调用登录接口然后用sed命令提取出token值

linux中curl调用登录接口然后用sed命令提取出token值

作者头像
吴易娃
发布2024-01-12 18:00:00
2510
发布2024-01-12 18:00:00
举报
文章被收录于专栏:易娃的杂货铺易娃的杂货铺

💡背景: 因为客户现场特殊情况不能访问管理平台Web页面,且不能远程访问服务器和其中的所有虚拟机实例,只能在机房直接操作集群对应服务器。现场技支同事需要上传一个镜像文件到集群中的某一个微服务中,通常还可以通过Web页面进行操作,现在却不行。为了解决他们的这个述求,就想到直接从宿主机中调用对应服务的注册接口获取token,然后再直接调用上传的接口上传镜像文件。

1. 把镜像文件上传到宿主机

  • 把需要上传的镜像文件拷贝到集群中任一节点的宿主机系统中去(建议就NG节点,接口请求本身也就是先走NG),目录随意记住就行。

2. 获取token

首先需要通过注册接口获取token用于后续接口调用的鉴权,但是toeken是一个很长的字符串,再加上只能操作纯命令行的Linux系统,所以就不能使用鼠标直接选择复制这种操作了。为了方便现场同事后续的操作,就只能把接口返回的token值直接写入到一个文件中或者一个变量函数,此处选择的是写文件。

2.1 方法一

直接将接口返回全部写入到一个指定文件,然后再编辑该文件,手动删掉无用的内容只保留token值的部分。好处是命令较短,手动敲入的时候出错的概率较低,缺点是操作较繁琐。

调用登录接口获取token
  • 在服务器上执行下方的命令获取token,并把token写入文件response.txt
代码语言:text
复制
curl --location --request POST 'http://xx.xx.xx.xx/api/v2/login' --header 'Content-Type: application/json' --data-raw '{"userName": "xxxxx","password": "xxxxx"}' > response.txt

💡参数说明:

  • 使用curl命令直接调用登陆接口
  • 同时使用>把接口返回接口重定向写入到文件response.txt中去
编辑response.txt文件,只保留token值部分的内容
  • 使用vim命令编辑response.txt文件,只保留token字段的值那部分内容,其他内容删除掉(如下图),然后:wq保存退出
    • 编辑前:
    https://cdn.jsdelivr.net/gh/alexwuyh/pic-host@master/photo/202212291424420.png
    https://cdn.jsdelivr.net/gh/alexwuyh/pic-host@master/photo/202212291424420.png
    • 编辑后:
    https://cdn.jsdelivr.net/gh/alexwuyh/pic-host@master/photo/202212291425499.png
    https://cdn.jsdelivr.net/gh/alexwuyh/pic-host@master/photo/202212291425499.png

2.2 方法二

将接口返回的值先进行处理,截取出token值部分的内容后再写入到一个指定的文件中去。好处是减少手动编辑文件删除内容截取token的步骤(毕竟接口返回内容还是比较多),缺点是命令较长手动敲入时容易出错。

调用登录接口获取token,并自动截取出token值部分内容
  • 执行下方的命令获取token,并把处理好的token值写入到文件中去
代码语言:text
复制
curl --location --request POST 'http://xx.xx.xx.xx/api/v2/login' --header 'Content-Type: application/json' --data-raw '{"userName": "xxxxx","password": "xxxxx"}' | sed 's/,/\n/g' | grep "token" | sed 's/:/\n/g' | sed '1d' | sed 's/"//g' > response.txt

💡参数说明:

  • 使用curl命令直接调用登陆接口
  • 第一个sed是将,换成\n
  • 第二个grep 是将 token 关键字找出来,并单独列出来
  • 第三个 sed是将 : 换成 \n
  • 第四个sed 是删除第一行
  • 第五个sed是将 " 用空字符替换掉, 最后的g的参数表示替换所有符合的引号
  • 第六个>是将结果重定向写入到文件response.txt

3. 调用上传接口,上传镜像文件

  • 读取之前写入token的文件,并使用xargs命令传入curl的接口请求参数中去(当然还有其他的方法实现传参,此处就不做介绍了,一切以现场同事手动录入方便为先)
代码语言:text
复制
cat response.txt | xargs -I {} curl -v  --location --request POST 'http://xx.xx.xx.xx/api/v2/image' --header 'Authorization: Bearer {}' --form 'file=@"/home/app/xxxxxx.tar.gz"'

💡参数说明:

  • xargs命令后面那个参数是大写的英文字母i
  • 把镜像包的路径替换为现场的真实路径(file=@后面那部分)
  • 接口返回状态为HTTP 100 Continue,这表示镜像文件正在上传中,耐心等待,直到文件上传完成即可
https://cdn.jsdelivr.net/gh/alexwuyh/pic-host@master/photo/202211161059420.png
https://cdn.jsdelivr.net/gh/alexwuyh/pic-host@master/photo/202211161059420.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 把镜像文件上传到宿主机
  • 2. 获取token
    • 2.1 方法一
      • 调用登录接口获取token
      • 编辑response.txt文件,只保留token值部分的内容
      • 调用登录接口获取token,并自动截取出token值部分内容
  • 2.2 方法二
  • 3. 调用上传接口,上传镜像文件
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档