首页 > 解决方案 > 构造 HTTP POST 请求以包括 req 查询,但请求正文中包含 q 值

问题描述

我目前正在尝试使用 Go 中的 HTTP 包发出 POST 请求。在请求的正文中,它需要从 API 调用的查询中提取的“代码”来完成请求。

但是,我首先需要声明 req 以添加查询 URL 值来执行此操作。所以我坚持将 q 声明为 url.Values{},将其传递到我的帖子正文,然后必须在初始 HTTP 声明之后添加值。

但是因为我在添加这些值之前将 q 传递给请求,所以在我发送请求时请求 URL 不包含它们。所以我基本上只是发送一个空白查询(我认为)。

那么如何解决这个问题并将查询详细信息传递给我的 http 请求但访问查询值?

希望这是有道理的——这令人困惑!

这是我的代码:

func Fetch(w http.ResponseWriter, r *http.Request) {

    client := &http.Client{}

    q := url.Values{}

    req, err := http.NewRequest("POST", "https://auth.truelayer-sandbox.com/connect/token", strings.NewReader(q.Encode()))

    if err != nil {
        log.Print(err)
        fmt.Println("Error was not equal to nil at first stage.")
        os.Exit(1)
    }

    q.Add("grant_type", "authorization_code")
    q.Add("id", os.Getenv("ID"))
    q.Add("secret", os.Getenv("SECRET"))
    q.Add("redirect_uri", "https://callback.com")
    q.Add("query-param", req.URL.Query().Get("query-param"))

    req.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error sending request to server")
        os.Exit(1)
    }

    respBody, _ := ioutil.ReadAll(resp.Body)
    w.WriteHeader(resp.StatusCode)
    w.Write(respBody)

}

标签: go

解决方案


推荐阅读