GET 请求,RESTFUL 风格是 https://XXX.test.com/v1/files/{id}
这个 id 我不是真正的 id,我要放的是一个路径参数,比如:file/hello.txt
我尝试过用,URL 编码+BASE64,但是还是会遇到最后的编码会出现特殊字符的情况
还是说取消{id}这个参数,直接把 “ file/hello.txt ”
1
YuJianrong 2019-06-16 13:27:44 +08:00 via iPhone
不过你一定要放 url 里,把 base64 两个特殊的符号转一下即可: https://stackoverflow.com/a/5835352
当然我不觉得这种信息放 url 是个好主意(甚至包括放 query ) |
2
k9982874 2019-06-16 13:34:33 +08:00 via iPhone
非要 base64 ?转 16 进制不就解决了?
|
3
miao1007 2019-06-16 13:47:42 +08:00
全部用 PostRaw 就行了
|
4
bertonzh 2019-06-16 13:49:50 +08:00
不能用 file%2Fhello.txt 吗?
|
5
chinvo 2019-06-16 13:53:32 +08:00 via iPhone
用 base62
|
6
otakustay 2019-06-16 15:59:24 +08:00
所以改成?id=之后就不会有特殊字符了吗……
|
7
Bromine0x23 2019-06-16 16:07:49 +08:00
|
8
zhidian 2019-06-16 16:14:32 +08:00
encodeURIComponent
|
9
zhidian 2019-06-16 16:15:14 +08:00
我好像理解错了...
|
10
dunhanson OP @YuJianrong 就想问下有没有通用的解决办法
|
12
dunhanson OP @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). |
13
dunhanson OP @Bromine0x23 前者不行,后者可以
|
14
Bromine0x23 2019-06-16 16:40:56 +08:00
@dunhanson 一般性的来说两种格式是都可以的(合法且参数可以被正确解析出来),从错误信息来看可能是服务器或者 Web 框架因为安全原因阻止了%2F 出现在 URI 中
|
15
whoami9894 2019-06-16 16:46:11 +08:00 via Android
尝试了几个 Web 框架,restful 风格的资源符 urlencode 后的%2F 还是会被识别为路径分割
所以要么 url param 传参,要么换编码 |
16
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 |
17
JamesMackerel 2019-06-16 17:19:09 +08:00
urlsafe base64 了解一下。
|
18
zk123 2019-06-17 06:55:57 +08:00 via iPhone
正则匹配?
|
19
dunhanson OP @whoami9894 感觉是由 url 传参的方式方便些,但是不知道是否符合规范,少了{id}
|
21
dunhanson OP @JamesMackerel 嗯 之前有搜到过这类文章
|
22
index90 2019-06-17 10:33:47 +08:00
直接: https://XXX.test.com/v1/files/{filepath}
有什么问题? 最多就是用不了框架的匹配取出来罢了,但是你可以直接操作 URL 啊。本来文件路径又是 URL 的一种。 |
24
ggicci 2019-06-17 14:59:20 +08:00
第一:RESTful 请保持使用 `/v1/files/{id}`,而不建议使用 `/v1/files?id=xxx`,如果不清楚为什么,请仔细阅读 RESTful 规范。
第二:路径中的 `{id}` 内容需要编码,类似于 `urlencode` 之类的函数,但是更推荐使用 URL 处理库处理一整个 URL 对象。 第三:除非极其简单的 URL 字符串拼接,否则**一定**使用 URL 处理库来处理 URL,且遵循 URL 处理步骤:解码 -> 处理 -> 编码。各种 URL 处理库怎么使用请参考相应的文档。 |