龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > Golang > golang判断是移动端还是PC端

golang判断是移动端还是PC端

龙行    Golang    2019-6-24    438    0评论    本文已被百度收录点击查看详情
package main

import (
	"fmt"
	"net/http"
	"regexp"
	"strconv"
	"strings"
)

func HttpStart(port int) {
	http.HandleFunc("/hello", helloFunc)
	http.HandleFunc("/mobile", IsMobile)
	err := http.ListenAndServe(":"+strconv.Itoa(port), nil)
	if err != nil {
		fmt.Println("监听失败:", err.Error())
	}
}

func helloFunc(w http.ResponseWriter, r *http.Request) {
	fmt.Println("打印Header参数列表:")
	if len(r.Header) > 0 {
		for k, v := range r.Header {
			fmt.Printf("%s=%s\n", k, v[0])
		}
	}
	fmt.Println("打印Form参数列表:")
	r.ParseForm()
	if len(r.Form) > 0 {
		for k, v := range r.Form {
			fmt.Printf("%s=%s\n", k, v[0])
		}
	}
	//验证用户名密码,如果成功则header里返回session,失败则返回StatusUnauthorized状态码
	w.WriteHeader(http.StatusOK)
	if (r.Form.Get("user") == "admin") && (r.Form.Get("pass") == "888") {
		w.Write([]byte("hello,验证成功!"))
	} else {
		w.Write([]byte("hello,验证失败了!"))
	}
}

//check if is mobile broswer
func IsMobile(w http.ResponseWriter, r *http.Request) {
	fmt.Println("打印Header参数列表:")
	//put headers in a map
	headers := make(map[string]string)

	//beego中获取headers 
	//headers := this.Ctx.Request.Header
	//for key,item := range headers{
		//fmt.Printf("%s=%s\n", key, item[0])
	//}

	//net/http中获取headers
	if len(r.Header) > 0 {
		for k, v := range r.Header {
			headers[k] = v[0]
			//fmt.Printf("%s=%s\n", k, v[0])
		}
	}
	var is_mobile = false
	via := strings.ToLower(headers["VIA"])
	accept := strings.ToUpper(headers["Accept"])
	HTTP_X_WAP_PROFILE := headers["X_WAP_PROFILE"]
	HTTP_PROFILE := headers["PROFILE"]
	HTTP_USER_AGENT := headers["User-Agent"]
	if via != "" && strings.Index(via, "wap") != -1 {
		is_mobile = true
	} else if accept != "" && strings.Index(accept, "VND.WAP.WML") != -1 {
		is_mobile = true
	} else if HTTP_X_WAP_PROFILE != "" || HTTP_PROFILE != "" {
		is_mobile = true
	} else if HTTP_USER_AGENT != "" {

		reg := regexp.MustCompile(`(?i:(blackberry|configuration\/cldc|hp |hp-|htc |htc_|htc-|iemobile|kindle|midp|mmp|motorola|mobile|nokia|opera mini|opera |Googlebot-Mobile|YahooSeeker\/M1A1-R2D2|android|iphone|ipod|mobi|palm|palmos|pocket|portalmmm|ppc;|smartphone|sonyericsson|sqh|spv|symbian|treo|up.browser|up.link|vodafone|windows ce|xda |xda_|MicroMessenger))`)

		fmt.Printf("%q\n", reg.FindAllString(HTTP_USER_AGENT, -1))

		if len(reg.FindAllString(HTTP_USER_AGENT, -1)) > 0 {
			is_mobile = true
		}

	}

	if is_mobile == true {
		w.Write([]byte("is mobile"))
	} else {
		w.Write([]byte("is not mobile"))
	}

}
func main() {
	HttpStart(8082)
}


评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/263.html
  • 上篇文章:根据访问者ip确定所属地区信息
  • 下篇文章:thinkphp5 RESTful API使用示例demo
  • go
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
快捷导航
联系博主
在线壁纸
给我留言
四四五五
音乐欣赏
返回顶部