我是新手Golang。 我正在尝试向认证终端点发送POST请求,以获取用于进一步验证请求的令牌。 目前我收到的错误是missing "credentials"
。 我已经在Python中编写了相同的逻辑,因此我知道我正在尝试做的就是系统所期望的。
package main
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/http/cookiejar"
"os"
)
type Auth struct {
Method string `json:"credentials"`
Email string `json:"email"`
Password string `json:"password"`
Mfa string `json:"mfa_token"`
}
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter Email: ")
e, _ := reader.ReadString('\n')
fmt.Print("Enter Password: ")
p, _ := reader.ReadString('\n')
fmt.Print("Enter 2FA Token: ")
authy, _ := reader.ReadString('\n')
auth := Auth{"manual", e, p, authy}
j, _ := json.Marshal(auth)
jar, _ := cookiejar.New(nil)
client := &http.Client{
Jar: jar,
}
req, err := http.NewRequest("POST", "https://internaltool.com/v3/sessions", bytes.NewBuffer(j))
if err != nil {
log.Fatal(err)
}
req.Header.Add("Accept-Encoding", "gzip, deflate, br")
res, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
s := string(body)
if res.StatusCode == 400 {
fmt.Println("Bad Credentials")
fmt.Println(s)
return
}
}
问题是 - 我是否正确地将AUTH结构体编组成JSON,并将其适当地添加到POST请求中?由于API甚至没有在JSON中看到credentials
键,我认为我一定做错了什么。任何帮助都可以。
Content-Type
,例如通过req.Header.Set("Content-Type", "application/json")
。尝试检查和比较使用Python
和Go
实现的请求。可以使用类似于HTTP Fiddler或betwixt的工具。 - putujson.Marshal
、cookiejar.New
和ioutil.ReadAll
的错误。当你在解决问题时,你需要尽可能多的信息,而丢弃错误会丢掉潜在有价值的故障排除细节。 - Adrian