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