首页 > 解决方案 > 如何不自动转义“|” 到“%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]);

谢谢

标签: dart

解决方案


可以在 URI 中使用的字符集是有限的。见rfc3986

竖线是不允许的,必须按照您的发现进行转义。

如果您在设置 get 时绝对需要使用竖线而不是转义序列,则必须用竖线字符替换您创建的 uri 变量中所有出现的 %7C 。

但是,这确实不应该起作用,或者如果它起作用,那是在标准之外工作的怪癖。

@SmitThakkar 建议解决这个问题更好的是使用标准字符 - 因为他们说的是“-”或“_”。或者发送正确编码的竖线并让后端代码正确读取和解释 URI,而不是期望看到非标准字符。


推荐阅读