ホームページ > バックエンド開発 > Golang > URL エンコードされた POST リクエストを送信すると 400 BAD REQUEST が発生するのはなぜですか?

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

Linda Hamilton
リリース: 2024-12-21 22:19:19
オリジナル
958 人が閲覧しました

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

URL エンコードされたペイロードを含む POST リクエスト

URL エンコードされたデータを含む POST リクエストを構築する場合、400 BAD が発生するのが一般的ですREQUEST 応答。サーバーがペイロードを理解できないことを示します。この問題は通常、ペイロードが正しく提供されない場合に発生します。

標準ライブラリの http.NewRequest(...) メソッドは、ペイロードが 3 番目の引数として提供されることを期待しており、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 関数に提供されます。その後、リクエストは適切に構築されて送信されます。

以上がURL エンコードされた POST リクエストを送信すると 400 BAD REQUEST が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート