华域联盟 Golang golang的HTTP基本认证机制实例详解

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基本认证机制实例详解

转载请保留出处和原文链接:https://www.cnhackhy.com/110119.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们