Go语言 Http库 注册激活用户 实践
  zNxK8cIqmu7p 2023年11月13日 17 0

背景

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

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


步骤分解

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


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

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

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

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


  • 激活接口 put 请求。

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

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

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

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



2 postman 进行验证

  • 注册接口验证

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

  • 激活接口验证

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

Go语言 Http库 注册激活用户 实践_golang_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 开启注册限制(略)

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  38gcbVXUBcLA   2023年11月26日   19   0   0 服务器htmlHTTP
  L83A5jZvvg3Q   2023年11月22日   15   0   0 长连接TCPHTTP
  38gcbVXUBcLA   2023年11月24日   17   0   0 服务器客户端HTTP
  KRsXEGSB49bk   2023年11月24日   44   0   0 TCPHTTP首部
  eHipUjOuzYYH   2023年12月06日   13   0   0 nginxHTTP
  L83A5jZvvg3Q   2023年11月22日   15   0   0 HTTP重定向字段
  O3FLR83nwSoe   2023年11月22日   20   0   0 nginxHTTPbash
  L83A5jZvvg3Q   2023年11月22日   20   0   0 客户端HTTP字段
  38gcbVXUBcLA   2023年11月25日   17   0   0 服务器客户端HTTP
  KRsXEGSB49bk   2023年11月22日   18   0   0 TCPHTTP首部