ホームページ >バックエンド開発 >Golang >http.NewRequest() を使用して URL エンコードされた POST リクエストを適切に送信する方法

http.NewRequest() を使用して URL エンコードされた POST リクエストを適切に送信する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-24 11:35:17701ブラウズ

How to Properly Send a URL-Encoded POST Request using http.NewRequest()?

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

このコンテキストでは、POST を送信するつもりです。 application/x-www-form-urlencoded コンテンツとしてフォーマットされたペイロードを含む、事前定義された API を介したリクエスト。 Request.ParseForm のようなメソッドに依存する代わりに、http.NewRequest(...) を使用した好ましいアプローチをさらに詳しく見てみましょう。

リクエスト ヘッダーを効率的に管理するには、http.NewRequest(method, urlStr string) を選択しました。 、body io.Reader) を使用してリクエストを作成します。この戦略は一般に適切ですが、重要な見落としはペイロードの処理にあります。 HTTP 仕様によれば、URL エンコードされたペイロードは、URL に直接追加されるのではなく、body パラメータを介して提供される必要があります。

したがって、この問題を修正するには、URL エンコードされたペイロードを含めるようにコードを変更する必要があります。本体部分にあります。以下に例を示します。

package main

import (
    "fmt"
    "net/http"
    "net/url"
    "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)
}

この変更により、コードは API の要求に応じて本文内の URL エンコードされたペイロードを正しく送信できるようになります。したがって、それぞれのステータス 200 OK で示されるように、成功した応答が期待されるはずです。

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

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