首页 >后端开发 >Golang >为什么我在发送 URL 编码的 POST 请求时收到 400 BAD REQUEST?

为什么我在发送 URL 编码的 POST 请求时收到 400 BAD REQUEST?

Linda Hamilton
Linda Hamilton原创
2024-12-21 22:19:19962浏览

Why am I getting a 400 BAD REQUEST when sending URL-encoded POST requests?

带有 URL 编码负载的 POST 请求

使用 URL 编码数据构建 POST 请求时,经常会遇到 400 BAD REQUEST 响应,表明服务器无法理解负载。当有效负载提供不正确时,通常会出现此问题。

标准库的 http.NewRequest(...) 方法期望将有效负载作为第三个参数提供,该参数应实现 io.Reader 接口。对于 URL 编码的有效负载,这意味着它应该是一串编码的键值对。

示例代码:

正确发送 URL 编码使用 http.NewRequest(...) 将数据作为 POST 请求,请考虑以下示例:

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "strings"
)

func main() {
    apiUrl := "https://api.com"
    resource := "/user/"
    data := url.Values{}
    data.Set("name", "foo")
    data.Add("surname", "bar")

    u, _ := url.ParseRequestURI(apiUrl + resource)
 
    client := &http.Client{}
    r, _ := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(data.Encode()))
    r.Header.Add("Authorization", "auth_token=\"XXXXXXX\"")
    r.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    resp, _ := client.Do(r)
    fmt.Println(resp.Status)
    bodyBytes, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(bodyBytes))
}

在此示例中, URL 编码的有效负载提供给 strings.NewReader 函数,该函数实现 io.Reader。然后正确构建并发送请求。

以上是为什么我在发送 URL 编码的 POST 请求时收到 400 BAD REQUEST?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn