首页 > 其他分享 >Go语言 Http库 注册激活用户 实践

Go语言 Http库 注册激活用户 实践

时间:2023-09-02 19:31:53浏览次数:30  
标签:username Http string err 注册 Go 激活 uuid

背景

需要在公司的平台上面,批量给用户注册,并激活账号信息。

主要是通过 console 接口进行激活和注册,所以要使用到Go语言的http库,在此记录。


步骤分解

  1. console 页面注册获取注册和激活接口需要的信息。
  2. 通过 postman 验证接口。
  3. 关闭服务IP注册限制(公司代码相关)。
  4. 通过代码进行注册激活。
  5. 恢复服务IP注册限制(公司代码相关)。


1 获取注册和激活接口信息

  • 注册接口 post 请求。主要传递用户名和密码

Go语言 Http库 注册激活用户 实践_golang

Go语言 Http库 注册激活用户 实践_http_02


  • 激活接口 put 请求。

点击恢复按钮,对用户进行激活。

Go语言 Http库 注册激活用户 实践_go_03

Go语言 Http库 注册激活用户 实践_go_04

Go语言 Http库 注册激活用户 实践_http_05



2 postman 进行验证

  • 注册接口验证

Go语言 Http库 注册激活用户 实践_golang_06

  • 激活接口验证

Go语言 Http库 注册激活用户 实践_go_07

Go语言 Http库 注册激活用户 实践_http_08


3 关闭注册限制(略)

于公司代码配置文件相关。


4 Http库注册

初始化项目

go mod init shaojun.com/create-user


  • 注册用户的方法

根据注册返回的信息创建 struct,拿到uuid,uuid在激活的时候使用。

// 获取uuid
type RegisterResponse struct {
	Code        int    `json:"code"`
	Title       string `json:"title"`
	Message     string `json:"message"`
	Description string `json:"description"`
	User        struct {
		UUID string `json:"uuid"`
	} `json:"user"`
}

// 注册用户
func registerUser(username string, password string) (string, error) {
	// 注册用户接口
	urlStr := "https://xxxxxxx/api/console/system/security/register"

	// 注册用户请求体
	urlValues := url.Values{}
	urlValues.Add("username", username)
	urlValues.Add("password", password)

	// 注册用户 post 请求
	r, err := http.PostForm(urlStr, urlValues)
	if err != nil {
		log.Fatal(err)
		return "", err
	}
	defer r.Body.Close()

	// 获取uuid
	var response RegisterResponse
	if err := json.NewDecoder(r.Body).Decode(&response); err != nil {
		log.Fatal(err)
		return "", err
	}

	// fmt.Printf("UUID: %s\n", response.User.UUID)
	return response.User.UUID, nil
}

注册接口返回

{
"code": 0,
"title": "SUCCESS",
"message": "SUCCESS",
"description": "",
"user": {
	"uuid": "xxxxxxx",
	"username": "shaojunxxxxx",
	"type": "basic",
	......
  }
}



  • 激活用户方法
// 激活用户
func activeUser(username string, password string) {
	// 获取用户uuid
	uuid, err := registerUser(username, password)
	if err != nil {
		return
	}

	// 拼接域名
	urlStr := "https://xxxxxxxxx/api/console/system/users/" + uuid + "/active"
	fmt.Printf("激活urlStr: %v\n", urlStr)

	// 请求体
	payload := []byte("active=true")

	// put 请求
	req, err := http.NewRequest("PUT", urlStr, bytes.NewBuffer(payload))
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	// 设置 headers
	req.Header.Set("Accept", "application/json")
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")
	req.Header.Set("Cookie", "auth_token=xxxxxxxxxx")

	// 创建一个 HTTP 客户端并执行请求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer resp.Body.Close()

	// 处理响应
	fmt.Println("Response Status:", resp.Status)
}


  • 创建用户方法

需要将用户列表保存在同一目录下 usernames.txt 文件里面

// 创建用户
func createUser(password string) {
	// 打开包含用户名的文件
	file, err := os.Open("usernames.txt")
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}
	defer file.Close()

	// 创建一个 Scanner 以读取文件内容
	scanner := bufio.NewScanner(file)

	// 逐行读取用户名并调用 activeUser 函数
	for scanner.Scan() {
		username := scanner.Text()
		activeUser(username, password)
		fmt.Printf("username: %v\n", username)
	}

	// 检查扫描过程是否出错
	if err := scanner.Err(); err != nil {
		fmt.Println("Error scanning file:", err)
	}

}


  • main方法
func main() {
	createUser("Ops@123456") //传入默认密码
}


5 开启注册限制(略)

标签:username,Http,string,err,注册,Go,激活,uuid
From: https://blog.51cto.com/u_11060853/7334672

相关文章

  • EasyCVR视频融合平台Linux环境下CGO调用C接口推流异常,H.265转H.264失败的原因是?
    EasyCVR视频融合云平台采用云边端一体化架构,可以将分散在仓储各处的前端监控设备(如IPC、NVR等)集中接入,并提供实时视频监控、视频录像、云存储、录像检索与回放、智能告警、云台控制、平台级联、服务器集群等视频能力服务。通过实时高清视频监控,仓储管理人员可以高效地监管人员和货......
  • Navicat 15永久激活完全指南
    准备工作在安装激活之前,确保安装的版本和对应的注册机版本是匹配的非常重要,否则可能导致激活码无法生效。我之前就因为这个问题浪费了很多时间,反复卸载重装。如果你们需要安装激活,可以使用我现成的NavicatPremium15和NavicatPremium15注册机。获取链接:docs.qq.com/doc/DWWpXbnd......
  • go并发编程系列五:线程分组及控制线程的合作执行
    背景:线程的合作执行,体现的是团结协作,应该是比较理想的状态,如果人人都能够少一些算计、多一点互帮互助,那该有多好啊?班主任不是资本家,班级更应该提倡团队精神,学生之间不应该竞争,应该互相协作!这篇文章以团结协作为出发点,讲解线程的合作执行。 TRANSLATEwithxEnglish......
  • go mod有关简单小结
    测试环境MAC CatalinaGO1.19VSCode包管理工具gomod在Golang1.11版本之前如果我们要自定义包的话必须把项目放在GOPATH目录。Go1.11版本之后无需手动配置环境变量,使用gomod管理项目,也不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目,Go1......
  • go并发编程系列四:线程分组及控制线程的执行
    背景:在上一篇中,作为班主任的你,对班级的管理初见成效,但理想和现实总有差距,理想情况下,从接手一个调皮的班级到班级的管理井井有条,是从0到1的跨越,没有中间的过渡阶段,然而,现实是:班级里少不了调皮的学生,对于这样的情况,应该怎么办呢?这篇文章讲解的正是现实中从0到1的过渡阶段,本文仅以讲......
  • go并发编程系列三:线程的顺序执行
    背景:在go并发编程系列二,你作为班主任,接手了有三个学生的班级,现状是这三个学生很调皮,看起来乱糟糟的,三个学生就是三个线程,怎么变的有序呢?答案是:给线程加锁!加锁需要使用go标准包的sync.Mutex,这是一个互斥锁。给线程加锁的代码:packageconcurrentimport("fmt""sync"......
  • go并发编程系列二:线程的并发执行
    新建concurrent文件夹,在该文件夹下创建concurrent.go,代码如下:packageconcurrentimport("fmt""time")funcThreadZhangSan(){fori:=1;i<=3;i++{fmt.Println("张三:",i)time.Sleep(time.Millisecond*50......
  • mongodb副本集(非仲裁模式)修改各节点ip(update方式)
    环境:OS:Centos7mongodb:5.0当前的ip变更后的ip192.168.1.108192.168.1.105   PRIMARY192.168.1.109192.168.1.106   SECONDARY192.168.1.110192.168.1.107   SECONDARY 1.查看当前的集群登录一个节点上查......
  • go并发编程系列:一、建立线程
    在go语言中,使用线程的格式是:go函数名当然,你也可以使用匿名函数,我们建立三个线程,代码如下:gotest1()gotest2()gofunc(){}是不是很简单?在下一系列中,我们将扩展这三个线程,进一步讲解go的并发编程!TRANSLATEwithxEnglishArabicHebrewPolishBulgar......
  • 微服务架构|go-zero 的自适应熔断器
    原文链接:go-zero的自适应熔断器上篇文章我们介绍了微服务的限流,详细分析了计数器限流和令牌桶限流算法,这篇文章来说说熔断。熔断和限流还不太一样,限流是控制请求速率,只要还能承受,那么都会处理,但熔断不是。在一条调用链上,如果发现某个服务异常,比如响应超时。那么调用者为了避免......