• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang的HTTP基本认证机制实例详解

    本文实例讲述了golang的HTTP基本认证机制。分享给大家供大家参考,具体如下:

    看了http权威指南>>第12章HTTP基本认证机制(本站下载地址:https://www.jb51.net/books/93254.html),感觉讲的蛮详细的,写了一个小小例子测试.

    请求响应过程:

    复制代码 代码如下:
    ==>
    GET /hello HTTP/1.1
    Host: 127.0.0.1:12345
    ==
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: Basic realm="Dotcoo User Login"
    ==>
    GET /hello HTTP/1.1
    Host: 127.0.0.1:12345
    Authorization: Basic YWRtaW46YWRtaW5wd2Q=
    ==
    HTTP/1.1 200 OK
    Content-Type: text/plain; charset=utf-8

    golang HTTP基本认证机制的实现

    复制代码 代码如下:
    package main
    import (
        "fmt"
        "io"
        "net/http"
        "log"
        "encoding/base64"
        "strings"
    )
    // hello world, the web server
    func HelloServer(w http.ResponseWriter, req *http.Request) {
        auth := req.Header.Get("Authorization")
        if auth == "" {
            w.Header().Set("WWW-Authenticate", `Basic realm="Dotcoo User Login"`)
            w.WriteHeader(http.StatusUnauthorized)
            return
        }
        fmt.Println(auth)
        auths := strings.SplitN(auth, " ", 2)
        if len(auths) != 2 {
            fmt.Println("error")
            return
        }
        authMethod := auths[0]
        authB64 := auths[1]
        switch authMethod {
        case "Basic":
            authstr, err := base64.StdEncoding.DecodeString(authB64)
            if err != nil {
                fmt.Println(err)
                io.WriteString(w, "Unauthorized!\n")
                return
            }
            fmt.Println(string(authstr))
            userPwd := strings.SplitN(string(authstr), ":", 2)
            if len(userPwd) != 2 {
                fmt.Println("error")
                return
            }
            username := userPwd[0]
            password := userPwd[1]
            fmt.Println("Username:", username)
            fmt.Println("Password:", password)
            fmt.Println()
        default:
            fmt.Println("error")
            return
        }
        io.WriteString(w, "hello, world!\n")
    }
    func main() {
        http.HandleFunc("/hello", HelloServer)
        err := http.ListenAndServe(":12345", nil)
        if err != nil {
            log.Fatal("ListenAndServe: ", err)
        }
    }

    希望本文所述对大家Go语言程序设计有所帮助。

    您可能感兴趣的文章:
    • golang实现http服务器处理静态文件示例
    • 浅谈golang的http cookie用法
    • golang编程入门之http请求天气实例
    • golang设置http response响应头与填坑记录
    • Go语言通过http抓取网页的方法
    • go语言实现一个最简单的http文件服务器实例
    • Go语言中利用http发起Get和Post请求的方法示例
    • go语言实现简单http服务的方法
    • Go语言的http/2服务器功能及客户端使用
    上一篇:golang简单tls协议用法完整示例
    下一篇:golang实现简单的udp协议服务端与客户端示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang的HTTP基本认证机制实例详解 golang,的,HTTP,基本,认证,