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 サイトの他の関連記事を参照してください。