本文介绍如何使用 Go 语言和 Fyne 框架编写一个简单的校园网登录客户端,支持多运营商选择(移动、联通、电信、教职工)。
📌 前言
在校园网环境下,通常需要通过 Web 认证才能访问互联网。如果每次手动输入账号密码登录,不仅麻烦,而且可能会遇到断网重连的情况。因此,我们可以使用 Go 语言编写一个 GUI 客户端,自动完成登录。
🔧 依赖安装
在开始之前,我们需要安装 Fyne 和 resty 依赖:
# 安装 Fyne
go get fyne.io/fyne/v2
# 安装 resty
go get resty.dev/v3
📝 代码实现
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
"net/http"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/widget"
"github.com/go-resty/resty/v2"
)
// 定义运营商类型
type ClientRole string
const (
CMCC ClientRole = "移动"
UNICOM ClientRole = "联通"
TELECOM ClientRole = "电信"
STAFF ClientRole = "教职工"
)
// SchoolClient 结构体
type SchoolClient struct {
host string
}
// NewSchoolClient 创建学校客户端
func NewSchoolClient(host string) *SchoolClient {
return &SchoolClient{host: host}
}
// setupParams 构造请求参数
func setupParams(u, p string, role ClientRole) string {
var c string
switch role {
case CMCC:
c = "@cmcc"
case UNICOM:
c = "@unicom"
case TELECOM:
c = "@telecom"
case STAFF:
c = ""
default:
c = ""
}
return fmt.Sprintf("DDDDD=%s&upass=%s&0MKKey=123456", u+c, hashPassword(p))
}
// hashPassword 对密码进行 MD5 加密
func hashPassword(password string) string {
hash := md5.Sum([]byte(password))
return hex.EncodeToString(hash[:])
}
// Login 逻辑
func (sc *SchoolClient) Login(u, p string, role ClientRole) error {
client := resty.New()
params := setupParams(u, p, role)
url := fmt.Sprintf("http://%s/drcom/login?%s", sc.host, params)
resp, err := client.R().Get(url)
if err != nil {
return err
}
if resp.StatusCode() == http.StatusOK {
return nil
}
return fmt.Errorf("登录失败: HTTP 状态码 %d", resp.StatusCode())
}
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("校园网登录")
usernameEntry := widget.NewEntry()
passwordEntry := widget.NewPasswordEntry()
roleSelect := widget.NewSelect([]string{string(CMCC), string(UNICOM), string(TELECOM), string(STAFF)}, nil)
loginButton := widget.NewButton("登录", func() {
client := NewSchoolClient("172.18.2.6")
if err := client.Login(usernameEntry.Text, passwordEntry.Text, ClientRole(roleSelect.Selected)); err != nil {
dialog.ShowError(err, myWindow)
} else {
dialog.ShowInformation("成功", "登录成功!", myWindow)
}
})
content := container.NewVBox(usernameEntry, passwordEntry, roleSelect, loginButton)
myWindow.SetContent(content)
myWindow.Resize(fyne.NewSize(300, 200))
myWindow.ShowAndRun()
}
✨ 功能亮点
-
📶 支持多种运营商:
- 通过下拉菜单选择
移动、联通、电信、教职工。
- 通过下拉菜单选择
-
🔒 密码加密:
- 使用 MD5 对密码进行加密后提交,提高安全性。
-
🖥️ 界面直观:
- 采用
Fyne框架,提供简洁直观的 GUI 界面。
- 采用
🎬 运行效果
-
首次运行
- 输入账号、密码,选择运营商,点击
登录。 - 成功后,会在本地保存账号信息。
- 输入账号、密码,选择运营商,点击
-
后续运行
- 自动填充之前的账号信息。
- 直接点击
登录按钮,无需重复输入。
🎯 结语
本教程演示了如何使用 Fyne 构建一个简单的校园网客户端,并支持多种运营商选择。希望对大家有所帮助!🙌 如果有更好的优化建议,欢迎留言讨论!🚀
2103

被折叠的 条评论
为什么被折叠?



