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