使用 Fyne 构建简单的校园网客户端

本文介绍如何使用 Go 语言和 Fyne 框架编写一个简单的校园网登录客户端,支持多运营商选择(移动、联通、电信、教职工)。


📌 前言

在校园网环境下,通常需要通过 Web 认证才能访问互联网。如果每次手动输入账号密码登录,不仅麻烦,而且可能会遇到断网重连的情况。因此,我们可以使用 Go 语言编写一个 GUI 客户端,自动完成登录。


🔧 依赖安装

在开始之前,我们需要安装 Fyneresty 依赖:

# 安装 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()
}

✨ 功能亮点

  1. 📶 支持多种运营商

    • 通过下拉菜单选择 移动联通电信教职工
  2. 🔒 密码加密

    • 使用 MD5 对密码进行加密后提交,提高安全性。
  3. 🖥️ 界面直观

    • 采用 Fyne 框架,提供简洁直观的 GUI 界面。

🎬 运行效果

  • 首次运行

    • 输入账号、密码,选择运营商,点击 登录
    • 成功后,会在本地保存账号信息。
  • 后续运行

    • 自动填充之前的账号信息。
    • 直接点击 登录 按钮,无需重复输入。

🎯 结语

本教程演示了如何使用 Fyne 构建一个简单的校园网客户端,并支持多种运营商选择。希望对大家有所帮助!🙌 如果有更好的优化建议,欢迎留言讨论!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值