ホームページ >バックエンド開発 >Golang >Go の `http.NewRequest(...)` を使用して URL エンコードされた POST リクエストを作成する方法

Go の `http.NewRequest(...)` を使用して URL エンコードされた POST リクエストを作成する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-19 11:31:10598ブラウズ

How to Make a URL-Encoded POST Request Using Go's `http.NewRequest(...)`?

http.NewRequest(...) を使用して URL エンコードされた POST リクエストを作成する

開発者は、HTTP リクエストの基本原則に基づいて構築します。多くの場合、URL エンコードされた POST ペイロードを含むリクエストなど、特定の特性を持つリクエストを構築する機能が必要になります。この記事では、汎用性の高い http.NewRequest(...) メソッドを使用してそのようなリクエストを作成する詳細を詳しく説明します。

伝統的に、URL エンコードされたデータは URL クエリ文字列内に含まれます。ただし、 http.NewRequest(...) メソッドを利用すると、ヘッダー管理をより詳細に制御できるようになります。このシナリオでは、URL にクエリを追加するときにリクエスト本文を空のままにすることは適切なアプローチではありません。

解決策は、io.Reader インターフェイスを介して URL エンコードされたペイロードを文字列として提供することです。次のコードでエレガントに示します。

package main

import (
    "fmt"
    "net/http"
    "net/url"
    "strconv"
    "strings"
)

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

    u, _ := url.ParseRequestURI(apiUrl)
    u.Path = resource
    urlStr := u.String() // "https://api.com/user/"

    client := &http.Client{}
    r, _ := http.NewRequest(http.MethodPost, urlStr, strings.NewReader(data.Encode())) // URL-encoded payload
    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) // Output: 200 OK
}

strings.NewReader() を介してリクエスト本文内に URL エンコードされた文字列を組み込むことにより、HTTP リクエストは適切に行われます。意図したペイロードを配信するように構成されています。この改訂されたアプローチにより、400 BAD REQUEST エラーが排除され、API が送信されたデータを正しく解釈できるようになります。

以上がGo の `http.NewRequest(...)` を使用して URL エンコードされた POST リクエストを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。