RESTFUL API URL 特殊字符的问题

2019-06-16 11:07:27 +08:00
 dunhanson

GET 请求,RESTFUL 风格是 https://XXX.test.com/v1/files/{id}

这个 id 我不是真正的 id,我要放的是一个路径参数,比如:file/hello.txt

我尝试过用,URL 编码+BASE64,但是还是会遇到最后的编码会出现特殊字符的情况

还是说取消{id}这个参数,直接把 “ file/hello.txt ”

改成 https://XXX.test.com/v1/files?id=file/hello.txt

3999 次点击
所在节点    程序员
24 条回复
YuJianrong
2019-06-16 13:27:44 +08:00
不过你一定要放 url 里,把 base64 两个特殊的符号转一下即可: https://stackoverflow.com/a/5835352
当然我不觉得这种信息放 url 是个好主意(甚至包括放 query )
k9982874
2019-06-16 13:34:33 +08:00
非要 base64 ?转 16 进制不就解决了?
miao1007
2019-06-16 13:47:42 +08:00
全部用 PostRaw 就行了
bertonzh
2019-06-16 13:49:50 +08:00
不能用 file%2Fhello.txt 吗?
chinvo
2019-06-16 13:53:32 +08:00
用 base62
otakustay
2019-06-16 15:59:24 +08:00
所以改成?id=之后就不会有特殊字符了吗……
Bromine0x23
2019-06-16 16:07:49 +08:00
zhidian
2019-06-16 16:14:32 +08:00
encodeURIComponent
zhidian
2019-06-16 16:15:14 +08:00
我好像理解错了...
dunhanson
2019-06-16 16:27:03 +08:00
@YuJianrong 就想问下有没有通用的解决办法
dunhanson
2019-06-16 16:27:19 +08:00
@k9982874 回头看看
dunhanson
2019-06-16 16:28:35 +08:00
@bertonzh 不行,会报错的

HTTP Status 400 – Bad Request
Type Status Report

Message Invalid URI: noSlash

Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
dunhanson
2019-06-16 16:29:00 +08:00
@Bromine0x23 前者不行,后者可以
Bromine0x23
2019-06-16 16:40:56 +08:00
@dunhanson 一般性的来说两种格式是都可以的(合法且参数可以被正确解析出来),从错误信息来看可能是服务器或者 Web 框架因为安全原因阻止了%2F 出现在 URI 中
whoami9894
2019-06-16 16:46:11 +08:00
尝试了几个 Web 框架,restful 风格的资源符 urlencode 后的%2F 还是会被识别为路径分割
所以要么 url param 传参,要么换编码
lianyue
2019-06-16 16:57:17 +08:00
https://XXX.test.com/v1/files/file/txt.txt
就好了啊
*匹配 就好了
*file

https://XXX.test.com/v1/files/{*file}

基本所有框架 都有这样匹配的吧
比如 gin 的
https://github.com/gin-gonic/gin#parameters-in-path
JamesMackerel
2019-06-16 17:19:09 +08:00
urlsafe base64 了解一下。
zk123
2019-06-17 06:55:57 +08:00
正则匹配?
dunhanson
2019-06-17 09:08:11 +08:00
@whoami9894 感觉是由 url 传参的方式方便些,但是不知道是否符合规范,少了{id}
dunhanson
2019-06-17 09:11:07 +08:00
@zk123 哈哈哈 确实是一个思路,刚才搜了一篇文章,看上去可行的 回头试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/574385

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX