POST参数中有空格的情况下,应该如何处理?

huangapple go评论82阅读模式
英文:

POST params with spaces in it

问题

如何在 post 参数中包含空格时进行 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)

请注意,以上代码是使用 Golang 编写的。

英文:

How do I make a POST request when the post param has spaces in it? Eg. in bash I would do this:

curl -X POST &quot;https://website.com/api&quot; --data-urlencode &quot;key=$SSHKey&quot; &lt;- &quot;ssh-rsa abcde abc@abc.com&quot;

I'm using the http.NewRequest method to send POST requests. http://golang.org/pkg/net/http/#NewRequest

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

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

答案1

得分: 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参数。

英文:

You should use url.QueryEscape.

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

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

Also note that you are talking of POST parameters but you are actually setting GET url parameters.

答案2

得分: 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

你可以参考这里了解更多关于net.url.Values.Encode的信息。

英文:

You could URL encode the parameter using net.url.Values.Encode:

package main

import &quot;fmt&quot;
import &quot;net/url&quot;    

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

Output:

key=foo+bar+baz

答案3

得分: 0

在许多语言中,你可以使用类似 %20+ 的方式来编码空格。我建议你尝试简单的字符串替换。例如:

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

英文:

In a lot of languages you encode space with something like %20 or +. I would suggest you to try simple string replacement. For example:

strings.Replace(params, &quot; &quot;, &quot;%20&quot;, -1)

huangapple
  • 本文由 发表于 2015年5月21日 15:10:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/30366868.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定