」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我在發送 URL 編碼的 POST 請求時收到 400 BAD REQUEST?

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

發佈於2024-12-22
瀏覽:867

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 編碼的有效負載被提供給實作 io.Reader 的 strings.NewReader 函數。然後正確建置並發送請求。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3