POST params中有空格

时间:2015-05-21 07:10:43

标签: go

当post param中有空格时,如何发出POST请求?例如。在bash我会这样做:

curl -X POST "https://website.com/api" --data-urlencode "key=$SSHKey" <- "ssh-rsa abcde abc@abc.com"

我使用http.NewRequest方法发送POST请求。 http://golang.org/pkg/net/http/#NewRequest

reqURL := fmt.Sprintf("https://website.com/api?key=%s", "ssh-rsa abcde abc@abc.com")

client := &http.Client{}
r, _ := http.NewRequest("POST", reqURL, nil)
client.Do(r)

3 个答案:

答案 0 :(得分:2)

您应该使用url.QueryEscape

reqURL := fmt.Sprintf("https://website.com/api?key=%s",
    url.QueryEscape("ssh-rsa abcde abc@abc.com"))

// https://website.com/api?key=ssh-rsa+abcde+abc%40abc.com

另请注意,您正在讨论POST参数,但实际上是在设置GET url参数。

答案 1 :(得分:2)

您可以使用net.url.Values.Encode对参数进行URL编码:

package main

import "fmt"
import "net/url"    

func main() {
    values := url.Values{}
    values.Set("key", "foo bar baz")
    fmt.Println(values.Encode())
}

输出:

key=foo+bar+baz

答案 2 :(得分:0)

在许多语言中,您使用%20+等内容对空间进行编码。我建议你尝试简单的string替换。例如:

strings.Replace(params, " ", "%20", -1)