首頁 > 後端開發 > Golang > 如何使用 http.NewRequest() 正確傳送 URL 編碼的 POST 請求?

如何使用 http.NewRequest() 正確傳送 URL 編碼的 POST 請求?

Mary-Kate Olsen
發布: 2024-12-24 11:35:17
原創
701 人瀏覽過

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

使用http.NewRequest(...) 發出URL 編碼的POST 請求

在此上下文中,您打算發送一個POST透過預先定義的API 進行請求,其有效負載格式為application/x-www-form-urlencoded 內容。讓我們不依賴像 Request.ParseForm 這樣的方法,而是使用 http.NewRequest(...) 更深入地研究首選方法。

為了有效管理請求標頭,您選擇了 http.NewRequest(method, urlStr string 、 body io.Reader)來製作您的請求。雖然這種策略總體上是合理的,但關鍵的監督在於有效負載的處理。根據 HTTP 規範,URL 編碼的有效負載應透過 body 參數提供,而不是直接附加到 URL。

因此,要修正此問題,您應該修改程式碼以包含 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 編碼的有效負載。因此,您應該預期成功的回應,如 resp.Status 200 OK 所示。

以上是如何使用 http.NewRequest() 正確傳送 URL 編碼的 POST 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板