gpt4 book ai didi

curl - 使用 Go 的 POST 失败但适用于 curl

转载 作者:IT王子 更新时间:2023-10-29 02:26:26 34 4
gpt4 key购买 nike

我已经针对我的应用程序测试了以下 curl 命令,它成功返回:

curl --data "username=john&password=acwr6414" http://127.0.0.1:5000/api/login

然而,尝试在 go 中复制上述内容已被证明是一个相当大的挑战,我不断从服务器收到 400 Bad Request 错误,代码如下:

    type Creds struct {
Username string `json:"username"`
Password string `json:"password"`
}

user := "john"
pass := "acwr6414"

creds := Creds{Username: user, Password: pass}
res, err := goreq.Request{
Method: "POST",
Uri: "http://127.0.0.1:5000/api/login",
Body: creds,
ShowDebug: true,
}.Do()
fmt.Println(res.Body.ToString())
fmt.Println(res, err)

我正在使用 goreq 包,我已经尝试了至少 3 或 4 个其他包,没有任何区别。我得到的错误是:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>

最佳答案

您发送的是带有 Go 代码的 json 正文,但发送的是带有 curl 的 application/x-www-form-urlencoded 正文。

您可以像使用 curl 一样手动编码字符串:

Body:      "password=acwr6414&user=john",

或者您可以使用 url.Values 对正文进行正确编码:

creds := url.Values{}
creds.Set("user", "john")
creds.Set("password", "acwr6414")

res, err := goreq.Request{
ContentType: "application/x-www-form-urlencoded",
Method: "POST",
Uri: "http://127.0.0.1:5000/api/login",
Body: creds.Encode(),
ShowDebug: true,
}.Do()

关于curl - 使用 Go 的 POST 失败但适用于 curl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41638076/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com