猿问

如何在 POST 方法中传递标头?

在这里,我有一个函数,我在其中发送一个 POST 请求,该请求用于将客户保存在带有数据的正方形中,并使用身份验证设置标头,variable_name.Header.Set() 但在正文响应中,它总是会给我以下错误:-


"errors":[

     {"category":"AUTHENTICATION_ERROR",

      "code":"UNAUTHORIZED",

      "detail":"Your request did not include an `Authorization` http header with an access token. }]}

但是在函数中我设置了身份验证令牌。


代码:-


func CreateCustomer(c *gin.Context) {

customer := models.Customer{}

bearer := strings.Split(c.Request.Header["Authorization"][0], "Bearer")// token pass in the postman.

bearerToken := strings.TrimSpace(bearer[1])


customerErr := json.NewDecoder(c.Request.Body).Decode(&customer)

if customerErr != nil {

    fmt.Println(customerErr)

    return

}

fmt.Println(customer)

bindData, err := json.Marshal(customer)

if err != nil {

    panic(err)

}

var jsonStr = []byte(string(bindData))

url :="https://connect.squareup.com/v2/customers"

fmt.Println(url)


req, err := http.Post(url, "application/json", bytes.NewBuffer(jsonStr))

// I used this one too.

// req.Header.Set("Authorization", "Bearer "+bearerToken)

// req.Header.Set("Accept", "application/json")

req.Header.Add("Authorization", "Bearer "+bearerToken)

req.Header.Add("Accept", "application/json")

fmt.Println(req.Header)

if err != nil {

    panic(err)

}

defer req.Body.Close()

body, _ := ioutil.ReadAll(req.Body)

fmt.Println("response Body:", string(body))

}


type Customer struct {

  GivenName    string   `json:"given_name" bson:"given_name"`

  FamilyName   string   `json:"family_name" bson:"family_name"`

  CompanyName  string   `json:"company_name" bson:"company_name"`

  Nickname     string   `json:"nickname" bson:"nickname"`

  EmailAddress string   `json:"email_address" bson:"email_address"`

  Address      Addresss `json:"address" bson:"address"`

  PhoneNumber  string   `json:"phone_number" bson:"phone_number"`

  ReferenceId  string   `json:"reference_id" bson:"reference_id"`

  Note         string   `json:"note" bson:"note"`

}


任何人都可以告诉我我应该做什么错误或我在哪里进行更正以便能够在 Squareup 中保存客户?


噜噜哒
浏览 127回答 2
2回答

浮云间

您的代码发送 POST 请求,并在处理请求后将标头添加到响应结构中:响应,错误:= http.Post(url, "application/json", bytes.NewBuffer(jsonStr))您应该先设置标头,然后再发送请求:// create requestreq, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))if err != nil {   panic(err)}// set headersreq.Header.Add("Authorization", "Bearer "+bearerToken)req.Header.Add("Accept", "application/json")// send request with headersclient := &http.Client{}response, err := client.Do(req)

慕标琳琳

唯一提醒的是,尽量不要混淆“身份验证”和“授权”,这是我遇到的一种障碍。不是字面上的意思,大家都懂的。然而,即使在语法中,很多材料也会交替使用这两个词,至少在我看来,这是不应该鼓励的。上面的话题就是一个很好的例子:以“身份验证”作为问题开始,然后以“授权”作为解决方案结束。
随时随地看视频慕课网APP

相关分类

Go
我要回答