在字符串中自动对查询参数进行 URL 编码是否明智?

Mat*_*hew 0 url bash curl url-encoding url-parameters

假设我想使用以下请求curl

https://api.foobar.com/widgets?begin=2018-09-10T01:00:00+01:00&object={"name":"barry"}
Run Code Online (Sandbox Code Playgroud)

该字符串的 URL 编码版本如下所示:

https://api.foobar.com/widgets?begin=2018-09-10T01%3A00%3A00%2B01%3A00&object=%7B%22name%22%3A%22barry%22%7D
Run Code Online (Sandbox Code Playgroud)

当然,当我在命令行发出请求时,我更愿意查看外观更漂亮(但不是 URL 有效的)的第一个版本。我正在考虑使用一个bash脚本来拆分好的版本的不同部分,对相关部分进行编码,然后将其重新粘在一起,这样我就不必担心了。

例如,在对 , 进行几轮简单拆分?&=我可以轻松获得:

  • https://api.foobar.com/widgets
  • begin
  • 2018-09-10T01:00:00+01:00
  • object
  • {"name":"barry"}

之后,URL 对查询字符串的两个值进行编码并将它们全部粘在一起。我接受查询字符串中&和 的任何出现=都会破坏这种方法。

还有什么我应该担心的,可能会使这成为一个特别愚蠢的想法吗?

ogu*_*ail 5

使用--data-urlencode--get

curl --data-urlencode 'begin=2018-09-10T01:00:00+01:00' --data-urlencode 'object={"name":"barry"}' --get 'http://api.foobar.com/widgets'
Run Code Online (Sandbox Code Playgroud)

-G , --get 使用时,此选项将使所有用 -d、--data、--data-binary 或 --data-urlencode 指定的数据用于 HTTP GET 请求而不是 POST 请求,否则会被使用。数据将附加到带有“?”的 URL 中。分隔器。