佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > golang的HTTP基本認(rèn)證機(jī)制實(shí)例詳解

golang的HTTP基本認(rèn)證機(jī)制實(shí)例詳解

熱門(mén)標(biāo)簽:呼叫中心市場(chǎng)需求 AI電銷(xiāo) Linux服務(wù)器 鐵路電話系統(tǒng) 百度競(jìng)價(jià)排名 網(wǎng)站排名優(yōu)化 服務(wù)外包 地方門(mén)戶(hù)網(wǎng)站

本文實(shí)例講述了golang的HTTP基本認(rèn)證機(jī)制。分享給大家供大家參考,具體如下:

看了http權(quán)威指南>>第12章HTTP基本認(rèn)證機(jī)制(本站下載地址:https://www.jb51.net/books/93254.html),感覺(jué)講的蠻詳細(xì)的,寫(xiě)了一個(gè)小小例子測(cè)試.

請(qǐng)求響應(yīng)過(guò)程:

復(fù)制代碼 代碼如下:
==>
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基本認(rèn)證機(jī)制的實(shí)現(xiàn)

復(fù)制代碼 代碼如下:
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)
    }
}

希望本文所述對(duì)大家Go語(yǔ)言程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • golang實(shí)現(xiàn)http服務(wù)器處理靜態(tài)文件示例
  • 淺談golang的http cookie用法
  • golang編程入門(mén)之http請(qǐng)求天氣實(shí)例
  • golang設(shè)置http response響應(yīng)頭與填坑記錄
  • Go語(yǔ)言通過(guò)http抓取網(wǎng)頁(yè)的方法
  • go語(yǔ)言實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的http文件服務(wù)器實(shí)例
  • Go語(yǔ)言中利用http發(fā)起Get和Post請(qǐng)求的方法示例
  • go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單http服務(wù)的方法
  • Go語(yǔ)言的http/2服務(wù)器功能及客戶(hù)端使用

標(biāo)簽:崇左 銅川 仙桃 湘潭 衡水 湖南 黃山 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang的HTTP基本認(rèn)證機(jī)制實(shí)例詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢(xún)

    • 400-1100-266
    揭阳市| 西乡县| 鹤庆县| 周口市| 晋城| 门源| 平武县| 新疆| 斗六市| 云南省| 东乡族自治县| 济源市| 临沭县| 扶风县| 安泽县| 石狮市| 隆回县| 绥化市| 循化| 新化县| 汽车| 环江| 马尔康县| 建昌县| 肇州县| 沭阳县| 剑阁县| 台东市| 新巴尔虎右旗| 双江| 聂荣县| 千阳县| 桃江县| 西峡县| 新密市| 西宁市| 奉新县| 黄山市| 衡南县| 南开区| 怀集县|