bash - 如何使用 bash 或 curl 将数据 urlencode 到 URL

标签 bash curl urlencode

如何将字符串编码并嵌入到 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/

相关文章:

ios - 带有表情符号/表情符号URL编码的NSString

Ruby - URL 编码

c - 使用 C 语言中具有 .crt 文件的 SSL 对 HTPPS 进行身份验证

php - AWS S3 cURL 超时

mysql - 在 bash 中将标准输出转换为 utf8

python - python 错误退出后未执行 Bash 陷阱

java - 如何避免转义 WebTarget 查询参数?

bash - 通过 docker-compose 拉取 ssh-client 容器

linux - 从参数化的 Hudson 作业中提取 shell 脚本

regex - 如何获取包含\n的最后一行?