如何将字符串编码并嵌入到 URL 中?请注意,我不是试图获取或发布数据,所以 -G
和 --data
和 --data- curl 的 urlencode
选项似乎无法完成这项工作。
例如,如果你使用了
curl -G http://example.com/foo --data-urlencode "bar=spaced data"
这在功能上等同于
curl http://example.com/foo?bar=spaced%20data"
这是不希望的。
我有一个字符串 foo/bar
必须对其进行 urlencoded foo%2fbar
并嵌入到 URL 中。
curl http://example.com/api/projects/foo%2fbar/events
一个假设的解决方案(如果我能找到类似的东西)是在 bash 中预处理数据,如果存在某种 urlencode
函数。
DATA=foo/bar
ENCODED=`urlencode $DATA`
curl http://example.com/api/projects/${ENCODED}/events
另一个假设的解决方案(如果我能找到类似的东西)是 curl 中的一些开关,类似于:
curl http://example.com/api/projects/{0}/events --string-urlencode "0=foo/bar"
我正在寻找这个问题的答案的具体原因是 Gitlab API。例如,gitlab get single project NAMESPACE/PROJECT_NAME
是 URL 编码的,例如。 /api/v3/projects/diaspora%2Fdiaspora
(其中 /
由 %2F
表示)。此外,您可以请求项目中的各个属性,因此您最终会得到一个 URL,例如 http://example.com/projects/diaspora%2Fdiaspora/events
虽然这个问题是特定于 gitlab 的,但我想它通常适用于一般的 REST API,而且我很惊讶我无法在 stackoverflow 或互联网搜索上找到预先存在的答案。
最佳答案
您提出的urlencode
函数很容易实现:
urlencode() {
python -c 'import urllib, sys; print urllib.quote(sys.argv[1], sys.argv[2])' \
"$1" "$urlencode_safe"
}
...用作:
data=foo/bar
encoded=$(urlencode "$data")
curl "http://example.com/api/projects/${encoded}/events"
如果你想要一些按字面意义传递的字符——在许多用例中,这是 /
所需要的——而是使用:
encoded=$(urlencode_safe='/' urlencode "$data")
关于bash - 如何使用 bash 或 curl 将数据 urlencode 到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37309551/