如何将字符串urlencoded并嵌入到URL中?请注意,我不尝试获取或发布数据,因此curl的-G
和--data
以及--data-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
并嵌入到网址中。
curl http://example.com/api/projects/foo%2fbar/events
如果存在某种urlencode
函数,那么一个假设的解决方案(如果我能找到这样的东西)就是用bash预处理数据。
DATA=foo/bar
ENCODED=`urlencode $DATA`
curl http://example.com/api/projects/${ENCODED}/events
另一个假设的解决方案(如果我能找到类似的东西)会卷曲一些,类似于:
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
表示)。此外,您可以在项目中请求单个属性,因此最终会得到http://example.com/projects/diaspora%2Fdiaspora/events
虽然这个问题是gitlab特有的,但我认为它一般适用于REST API,我很惊讶我无法找到预先存在的答案。 stackoverflow或互联网搜索。
答案 0 :(得分:3)
您建议的var dct = text.Trim(';').Split(';').Select(t=>t.Split(':')).ToDictionary(t=>t[0], t=>t[1]);
功能很容易实现:
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"
s所需要的 - 而是使用:
/