gpt4 book ai didi

http - 去做一个 GET 请求并构建 Querystring

转载 作者:IT老高 更新时间:2023-10-28 12:58:37 25 4
gpt4 key购买 nike

我对 Go 还是很陌生,还不太了解所有内容。在许多现代语言 Node.js、Angular、jQuery、PHP 中,您可以使用附加的查询字符串参数执行 GET 请求。

在 Go 中执行此操作并不像看起来那么简单,而且我还不能真正弄清楚。我真的不想为我想做的每个请求连接一个字符串。

这里是示例脚本:

package main

import (
"fmt"
"io/ioutil"
"net/http"
)

func main() {
client := &http.Client{}

req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular", nil)
req.Header.Add("Accept", "application/json")
resp, err := client.Do(req)

if err != nil {
fmt.Println("Errored when sending request to the server")
return
}

defer resp.Body.Close()
resp_body, _ := ioutil.ReadAll(resp.Body)

fmt.Println(resp.Status)
fmt.Println(string(resp_body))
}

在此示例中,您可以看到有一个 URL,它需要 api_key 的 GET 变量,并将您的 api 键作为值。问题在于这会以以下形式进行硬编码:

req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular?api_key=mySuperAwesomeApiKey", nil)

有没有办法动态构建这个查询字符串?目前,我需要在此步骤之前组装 URL 以获得有效响应。

最佳答案

正如评论者所说,您可以从具有 Encode 方法的 net/url 获取 Values。你可以这样做(req.URL.Query() 返回现有的 url.Values)

package main

import (
"fmt"
"log"
"net/http"
"os"
)

func main() {
req, err := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular", nil)
if err != nil {
log.Print(err)
os.Exit(1)
}

q := req.URL.Query()
q.Add("api_key", "key_from_environment_or_flag")
q.Add("another_thing", "foo & bar")
req.URL.RawQuery = q.Encode()

fmt.Println(req.URL.String())
// Output:
// http://api.themoviedb.org/3/tv/popular?another_thing=foo+%26+bar&api_key=key_from_environment_or_flag
}

http://play.golang.org/p/L5XCrw9VIG

关于http - 去做一个 GET 请求并构建 Querystring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30652577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com