基本上,我需要在 Go 中实现以下方法 - https://api.slack.com/methods/users.lookupByEmail。
我试着这样做:
import (
"bytes"
"encoding/json"
"errors"
"io/ioutil"
"net/http"
)
type Payload struct {
Email string `json:"email,omitempty"`
}
// assume the following code is inside some function
client := &http.Client{}
payload := Payload{
Email: "octocat@github.com",
}
body, err := json.Marshal(payload)
if err != nil {
return "", err
}
req, err := http.NewRequest("GET", "https://slack.com/api/users.lookupByEmail", bytes.NewReader(body))
if err != nil {
return "", err
}
req.Header.Add("Authorization", "Bearer "+token)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
t, _ := ioutil.ReadAll(resp.Body)
return "", errors.New(string(t))
}
responseData, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
return string(responseData), nil
但是我收到一个错误,即“电子邮件”字段丢失,这很明显,因为此内容类型不支持 JSON 有效负载: {"ok":false,"error":"invalid_arguments","response_metadata":{"messages":["[ERROR] missing required field: email"]}} (type: string)
我找不到如何在 GET 请求中包含发布表单 - http.NewRequest 和 http.Client.Get 都没有可用的发布表单参数;http.Client.PostForm 发出 POST 请求,但在这种情况下需要 GET。另外,我认为我必须在这里使用 http.NewRequest (除非存在另一种方法),因为我需要设置 Authorization 标头。
翻过高山走不出你
相关分类