gpt4 book ai didi

go - 如何在 Golang 中构建 URL/查询

转载 作者:数据小太阳 更新时间:2023-10-29 03:47:30 29 4
gpt4 key购买 nike

背景-

我需要根据来自表单的用户输入构建一个 URL/查询,该表单将用于进行 API 调用。

问题 -

构建 URL 时,参数未正确转义。例如,查询“bad santa”以空格结尾,而不是“+”。

当前输出 -

e.g. https://api.example.org/3/search/movie?query=badsanta&api_key=#######

预期输出-

e.g. https://api.example.org/3/search/movie?query=bad+santa&api_key=#######

代码示例 -

根网址 -

var SearchUrl = "https://www.example.org/3/search/movie?query="

从用户输入中获取参数 -

var MovieSearch []string = r.Form["GetSearchKey"]  

API key -

var apiKey = "&api_key=######"

我正在使用 ArrayToString() 来解析表单输入数据

func ArrayToString(array []string) string{
str := strings.Join(array, "+")
return str
}

然后构建 URL -

var SearchUrl = "https://api.example.org/3/search/movie?query="
var MovieSearch []string = r.Form["GetSearchKey"]
var apiKey = "&api_key=########"
UrlBuild := []string {SearchUrl, ArrayToString(MovieSearch), apiKey}
OUTPUT_STRING := ArrayToString(UrlBuild)

问题 -

如何使用正确转义的用户输入 GET 参数构建 URL?

最佳答案

一般情况下,应该使用url包的Values。

这是一个例子,它可以满足我的需求,on play既是简单的 main,又是 http.HandlerFunc 形式:

package main

import "fmt"
import "net/url"
import "net/http"

func main() {
baseURL := "https://www.example.org/3/search/movie"
v := url.Values{}
v.Set("query", "this is a value")
perform := baseURL + "?" + v.Encode()
fmt.Println("Perform:", perform)
}

func formHandler(w http.ResponseWriter, r *http.Request) {
baseURL := "https://www.example.org/3/search/movie"
v := url.Values{}

v.Set("query", r.Form.Get("GetSearchKey")) // take GetSearchKey from submitted form
v.Set("api_ley", "YOURKEY") // whatever your api key is

perform := baseURL + "?" + v.Encode() // put it all together
fmt.Println("Perform:", perform) // do something with it
}

输出:执行:https://www.example.org/3/search/movie?query=this+is+a+value

请注意这些值是如何放入查询字符串中并正确转义的。

关于go - 如何在 Golang 中构建 URL/查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35978605/

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