背景
需要在公司的平台上面,批量给用户注册,并激活账号信息。
主要是通过 console 接口进行激活和注册,所以要使用到Go语言的http库,在此记录。
步骤分解
- console 页面注册获取注册和激活接口需要的信息。
- 通过 postman 验证接口。
- 关闭服务IP注册限制(公司代码相关)。
- 通过代码进行注册激活。
- 恢复服务IP注册限制(公司代码相关)。
1 获取注册和激活接口信息
- 注册接口 post 请求。主要传递用户名和密码
- 激活接口 put 请求。
点击恢复按钮,对用户进行激活。
2 postman 进行验证
- 注册接口验证
- 激活接口验证
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") //传入默认密码
}