源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-04-26 04:04 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:golang的HTTP基本认证机制实例详解
本文实例讲述了golang的HTTP基本认证机制。分享给大家供大家参考,具体如下: 看了<<http权威指南>>第12章HTTP基本认证机制(本站下载地址:[url=http://www.1sucai.cn/books/93254.html]http://www.1sucai.cn/books/93254.html[/url]),感觉讲的蛮详细的,写了一个小小例子测试. [b]请求响应过程: [/b]
[u]复制代码[/u] 代码如下:
==> 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
[b]golang HTTP基本认证机制的实现 [/b]
[u]复制代码[/u] 代码如下:
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语言程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部