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

作者:dotcoo 时间:2024-04-26 17:28:39 

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

看了<<http权威指南>>第12章HTTP基本认证机制(本站下载地址:https://www.aspxhome.com/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,基本认证机制
0
投稿

猜你喜欢

  • MySQL外键约束的禁用与启用命令

    2024-01-27 00:45:04
  • 分析Python中设计模式之Decorator装饰器模式的要点

    2021-12-06 12:04:01
  • python字符串的常用操作方法小结

    2023-11-29 03:01:37
  • Python PO设计模式的具体使用

    2023-10-31 18:47:38
  • sql字符串函数大全和使用方法示例

    2024-01-26 22:17:48
  • 解决IDEA GIT记录无法查看提交文件的问题

    2022-12-08 01:46:25
  • pygame实现简单五子棋游戏

    2022-03-22 08:50:57
  • 用Popup窗口建无限级Web页菜单

    2023-07-10 20:22:17
  • myFocus slide3D v1.1.0 使用方法与下载

    2024-04-17 09:55:41
  • Python 自动化修改word的案例

    2021-11-08 21:18:16
  • Python爬取qq空间说说的实例代码

    2021-04-28 01:29:50
  • pytorch DataLoaderj基本使用方法详解

    2023-06-21 06:26:37
  • 网页设计配色基础:RGB与HSB

    2008-05-06 12:23:00
  • 使用python连接mysql数据库之pymysql模块的使用

    2024-01-16 13:12:11
  • 基于Python中random.sample()的替代方案

    2021-01-16 18:41:07
  • PHP lcfirst()函数定义与用法

    2023-06-05 01:25:20
  • 在 Python 应用中使用 MongoDB的方法

    2023-09-13 21:53:11
  • 多栏自适应布局问题浅谈

    2010-08-16 12:56:00
  • 聊聊Druid register mbean error的问题

    2022-09-15 19:09:00
  • 利用python实现简单的邮件发送客户端示例

    2022-06-19 18:25:07
  • asp之家 网络编程 m.aspxhome.com