「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > URL エンコードされた POST リクエストを送信すると 400 BAD REQUEST が発生するのはなぜですか?

URL エンコードされた POST リクエストを送信すると 400 BAD REQUEST が発生するのはなぜですか?

2024 年 12 月 22 日に公開
ブラウズ:544

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 インターフェイスを実装する必要がある 3 番目の引数としてペイロードが提供されることを期待しています。 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