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
投稿

猜你喜欢

  • Python编程源码报错解决方法总结经验分享

    2023-11-16 07:49:46
  • JS和JQuery实现雪花飘落效果

    2024-04-18 09:51:42
  • asp如何将产生的密码记录并发送给用户?

    2009-11-26 20:50:00
  • SQLSERVER2008中CTE的Split与CLR的性能比较

    2024-01-28 06:56:04
  • MySQL的主从复制原理详细分析

    2024-01-23 13:14:44
  • Linux(Redhat)安装python3.6虚拟环境(推荐)

    2022-06-08 23:34:13
  • Python使用matplotlib实现基础绘图功能示例

    2023-08-31 03:24:02
  • Django表单提交后实现获取相同name的不同value值

    2023-08-11 01:59:31
  • python3+selenium4实现切换窗口与iframe的方法

    2022-08-08 16:34:16
  • Python封装shell命令实例分析

    2022-03-11 13:39:37
  • Python 实现自动获取种子磁力链接方式

    2022-12-19 16:17:31
  • SQL语句练习实例之五 WMS系统中的关于LIFO或FIFO的问题分析

    2011-11-03 16:59:59
  • c++生成dll使用python调用dll的方法

    2023-02-16 11:40:05
  • sqlserver数据库出现置疑的解决思路

    2024-01-13 20:11:34
  • Python利用Beautiful Soup模块搜索内容详解

    2023-10-24 15:53:43
  • 菜鸟课堂:MSSQL的安全设置问题解答

    2009-10-29 13:22:00
  • Python保姆式手把手带你掌握异常的捕获和处理

    2022-04-30 14:10:18
  • js简单的分页器插件代码实例

    2024-04-29 13:23:22
  • 关于Python的Thread线程模块详解

    2022-12-20 02:48:16
  • python加速器numba使用详解

    2022-02-27 15:24:22
  • asp之家 网络编程 m.aspxhome.com