首頁 > 後端開發 > Golang > 為什麼我在發送 URL 編碼的 POST 請求時收到 400 BAD REQUEST?

為什麼我在發送 URL 編碼的 POST 請求時收到 400 BAD REQUEST?

Linda Hamilton
發布: 2024-12-21 22:19:19
原創
883 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板