如何制定对这些端点的请求

我不知道如何使用所需的参数发出“访问”、“时钟”和“审核”的请求。您能否指导我如何提出这些请求?


package main


import (

    "crypto/sha256"

    "crypto/subtle"

    "encoding/base64"

    "encoding/json"

    "fmt"

    "log"

    "net/http"

    "os"

    "sync"

    "time"

)


const secret = "galumphing"


// Required parameters for the request

type params struct {

    Act       string

    Nonce     string

    Signature string

    Timeout   int64

    Offset    int

}


var (

    auditLock sync.Mutex

    auditBase int

    auditLog  []string

)


var (

    seenLock sync.Mutex

    seenMap  = map[string]bool{}

)


var (

    clockAsk  = make(chan bool)

    clockTime = make(chan int64, 1)

)


func main() {

    // Endpoints available

    http.HandleFunc("/903/access", handleAccess)

    http.HandleFunc("/903/clock", handleClock)

    http.HandleFunc("/903/audit", handleAudit)


    err := http.ListenAndServe(os.Args[1], nil)

    if err != nil {

        log.Fatal(err)

    }

}


func checkCapacity(w http.ResponseWriter) (ok bool) {

    auditLock.Lock()

    defer auditLock.Unlock()


    if len(auditLog) > 10 {

        w.WriteHeader(http.StatusServiceUnavailable)

        return

    }


    ok = true

    return

}


func audit(r *http.Request, params params, ok bool) {

    auditLock.Lock()

    defer auditLock.Unlock()


    auditLog = append(auditLog, fmt.Sprintf("%v %q %q", ok, r.URL.Path, params.Act))

}


func parse(w http.ResponseWriter, r *http.Request) (params params, ok bool) {

    defer func() {

        if !ok {

            audit(r, params, false)

        }

    }()


    w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS")

    w.Header().Set("Access-Control-Allow-Origin", "*")

    w.Header().Set("Access-Control-Max-Age", "3600")


    if r.Method != "POST" {

        w.Header().Set("Allow", "POST, OPTIONS")

        if r.Method == "OPTIONS" {

            w.WriteHeader(http.StatusOK)

        } else {

            w.WriteHeader(http.StatusMethodNotAllowed)

        }

        return

    }




倚天杖
浏览 87回答 1
1回答

慕妹3146593

有几种方法可以解决这个问题。您可以使用 Postman 等工具,或者只是curl从命令行使用将发布请求发送到您的端点。这是我用来访问端点的curl命令(我使用端口8080进行测试),标志后面的位-d是请求正文:curl -X POST http://localhost:8080/903/access -d '{"Act": "act", "Nonce": "nonce", "Signature": "signature", "TimeOut": 64, "Offset": 0}'我确实修改了代码以删除大部分逻辑。此请求仅显示当前代码如何解析请求正文的示例。如果您对处理程序函数中的其他一些逻辑如何工作更感兴趣,请告诉我,我可以编辑我的回复。这是我用于测试的代码:package mainimport (    "encoding/json"    "fmt"    "log"    "net/http"    "os")// Required parameters for the requesttype params struct {    Act       string    Nonce     string    Signature string    Timeout   int64    Offset    int}func main() {    // Endpoints available    http.HandleFunc("/903/access", handleAccess)    err := http.ListenAndServe(os.Args[1], nil)    if err != nil {        log.Fatal(err)    }}func parse(w http.ResponseWriter, r *http.Request) (params params, ok bool) {    w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS")    w.Header().Set("Access-Control-Allow-Origin", "*")    w.Header().Set("Access-Control-Max-Age", "3600")    if r.Method != "POST" {        w.Header().Set("Allow", "POST, OPTIONS")        if r.Method == "OPTIONS" {            w.WriteHeader(http.StatusOK)        } else {            w.WriteHeader(http.StatusMethodNotAllowed)        }        return    }    err := json.NewDecoder(r.Body).Decode(&params)    if err != nil {        w.WriteHeader(http.StatusBadRequest)        log.Printf("%s: %v", r.URL.Path, err)        return    }    return}func handleAccess(w http.ResponseWriter, r *http.Request) {    params, _ := parse(w, r)    fmt.Printf("%+v\n", params)}这是我在完成所有操作后收到的输出:{Act:act Nonce:nonce Signature:signature Timeout:64 Offset:0}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go