为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
倚天杖 2023-07-26 17:08:44
我不知道如何使用所需的参数发出“访问”、“时钟”和“审核”的请求。您能否指导我如何提出这些请求?package mainimport (    "crypto/sha256"    "crypto/subtle"    "encoding/base64"    "encoding/json"    "fmt"    "log"    "net/http"    "os"    "sync"    "time")const secret = "galumphing"// Required parameters for the requesttype 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    }
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

有几种方法可以解决这个问题。您可以使用 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 main


import (

    "encoding/json"

    "fmt"

    "log"

    "net/http"

    "os"

)


// Required parameters for the request

type 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}


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信