wust校园网认证登录(web + pppoe拨号)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
canti/app/network/request.go

88 lines
2.4 KiB

package network
import (
"canti/app/api"
"canti/app/codecs"
"canti/app/commons"
"canti/app/model"
"encoding/json"
"github.com/go-resty/resty/v2"
)
var defaultHeaders = map[string]string{
"Accept": "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"Host": "59.68.177.183",
"Pragma": "",
"Referer": "http://59.68.177.183/srun_portal_pc?ac_id=7&theme=pro",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.42",
"X-Requested-With": "XMLHttpRequest",
}
func sendGetRequest(url string, param QueryParam) (string, error) {
client := resty.New()
resp, err := client.R().
SetQueryParams(param).
SetHeaders(defaultHeaders).
Get(url)
if err != nil {
return "", err
}
return commons.FilterJQueryPrefix(resp.String()), nil
}
func RequestAuth(username, password, ip, challengeCode string) (string, error) {
md5Password := codecs.HmacMd5(challengeCode, password)
jsonMap := infoBody{
Username: username,
Password: password,
Ip: ip,
Acid: "7",
EncVer: "srun_bx1",
}
infoData, _ := json.Marshal(jsonMap)
info := string(infoData)
encodedInfo := `{SRBX1}` + codecs.SRBX1Encode(info, challengeCode)
checksum := codecs.Checksum(challengeCode, username, md5Password, ip, encodedInfo)
return sendGetRequest(api.AuthApi, authQuery(username, `{md5}`+md5Password, checksum, encodedInfo, ip))
}
type infoBody struct {
Username string `json:"username"`
Password string `json:"password"`
Ip string `json:"ip"`
Acid string `json:"acid"`
EncVer string `json:"enc_ver"`
}
func RequestChallengeCode(username, ip string) (string, error) {
return sendGetRequest(api.ChallengeCodeApi, challengeCodeQuery(username, ip))
}
func RequestUserInfo() (string, error) {
return sendGetRequest(api.UserInfoApi, userInfoQuery())
}
func GetClientIp() (ip string, errs error) {
userInfoJson, err := RequestUserInfo()
if err != nil {
return "", err
}
var userInfo model.UserInfo
err2 := json.Unmarshal([]byte(userInfoJson), &userInfo)
if err2 != nil {
return "", err2
}
return userInfo.OnlineIp, nil
}