回答

收藏

执行 GET 请求并构建查询字符串

技术问答 技术问答 318 人阅读 | 0 人回复 | 2023-09-12

我对 Go 还是很奇怪,对所有内容都不太了解。 在许多现代语言中Node.js、Angular、jQuery、PHP 中,您可以使用额外的查询字符串参数来执行 GET 请求。- C. F7 [; g7 u) i
在 Go 执行这个操作并不像看起来那么简单,我还不能真正理解它。我真的不想连接我想做的每个请求的字符串。3 p4 z: `: S; p/ p4 r' D2 l! e
以示例脚本为例:
2 Q- c7 f! W$ I1 h: C$ E" e
    package mainimport  "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))}3 U* D% h- p8 F: f5 f& z  t
在这个例子中,你可以看到 URL,它需要 api_key 的 GET 变量,把你的 api 密钥作为值。问题是,这已成为以下形式的硬编码:, g" B0 K# h" P- m2 q8 o
    req,_ := http.NewRequest("GET","http://api.themoviedb.org/3/tv/popular?api_key=mySuperAwesomeApiKey",nil)+ o& F2 A5 ]; D% b) l
有没有办法动态构建这个查询字符串?目前,我需要在此步骤之前组合 URL 获得有效响应。
9 @7 s0 e/ T4 Q+ w                                                                - G- V% e! K1 e# ~0 U, n
    解决方案:                                                                - l8 H) g/ d/ C4 K1 T3 m' q- w
                                                                作为评论员,你可以提到你Values从net/url它有一个Encode方法。你可以做这样的事情(req.URL.Query()返回现有url.Values)
; Q! Z; Y9 F) O
    package mainimport  "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 & bar&api_key=key_from_environment_or_flag}
    4 W) r- `3 e3 f' }! L. @2 Q6 i: C) Q
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则