dart - 如何不自动转义“|” 到“%7C”
问题描述
我需要读取一个 URL,但 Httpclient 或 Dio 会自动转义“|” 到“%7C”
这让我总是看不懂这个网站,但我可以通过命令行的curl读取正确的内容
请问,我该如何处理才能使“|” 请求过程中不会转义到“%7C”
var uri = Uri(scheme: scheme, host: host, path: "abc.jpg?aaa|bbb|ccc&c=123");
var client = http.Client();
var response = await client.get(uri, headers: headers).whenComplete(client.close);
if (response.statusCode==200) {
return response.bodyBytes;
}
throw Exception([response.headers["x-tengine-error"], response.request.url, uri.path]);
谢谢
解决方案
可以在 URI 中使用的字符集是有限的。见rfc3986
竖线是不允许的,必须按照您的发现进行转义。
如果您在设置 get 时绝对需要使用竖线而不是转义序列,则必须用竖线字符替换您创建的 uri 变量中所有出现的 %7C 。
但是,这确实不应该起作用,或者如果它起作用,那是在标准之外工作的怪癖。
@SmitThakkar 建议解决这个问题更好的是使用标准字符 - 因为他们说的是“-”或“_”。或者发送正确编码的竖线并让后端代码正确读取和解释 URI,而不是期望看到非标准字符。
推荐阅读
- python - 更改熊猫中重复项的值
- roblox - Roblox 工具赠送者脚本适用于一名玩家,但一直在赠送
- java - 找不到JSP文件可能是春天的一个错误
- java - 如果内部运行的 JVM 进程死亡,则终止 docker 容器
- javascript - ReactJs 中的 MegaMenu 使用 useState 钩子
- java - 我应该如何在 android studio 中获取颜色并比较它们?
- javascript - 异步 IIFE 后变量未定义
- html - 为什么我的 .scss“代码”在我的 html 页面中不起作用
- c++ - 防止 CMake 将库导出目录添加到可执行 RPath
- svg - bootstrap 5 svg 字体图标无法正常工作