自定义URL方案为现有的URL方案适配器(Custom URL scheme as adapter

2019-10-19 04:22发布

是否有一个干净和规格符合的方式来定义作为对另一个URL返回的资源适配器的自定义URL方案?

我已经定义它返回一个本地文件的解密表示自定义URL协议。 所以,举例来说,在我的代码,

decrypted-file:///path/to/file

透明解密,你会从得到的文件file:///path/to/file 。 然而,这仅适用于本地文件。 没有什么好玩的! 我希望的是,URL规范允许一个干净的方式,我可以通过定义一个新的URL方案作为一种对现有的URL适配器的概括这一点。

例如,可以代替我定义自定义URL方案decrypted:可以用来作为前缀在获得资源的另一个绝对URL适配器? 然后,我可能只是做

decrypted:file:///path/to/file

decrypted:http://server/path/to/filedecrypted:ftp://server/path/to/file或什么的。 这将使我的decrypted:协议组合的所有现有URL方案的那些文件检索。

Java那样具有类似jar: URL方案,但是从我的阅读RFC 3986 ,好像这个Java技术违反了URL规范。 嵌入式URL不能准确字节编码,所以任何/?#在嵌入式URL分隔符应正式被视为在嵌入URL(即使这不是段分隔符JarURLConnection一样)。 我想留在规范之内。

是否有一个很好的正确的方式做到这一点? 或者是字节编码整个嵌入式URL的唯一选择(即decrypted:file%3A%2F%2F%2Fpath%2Fto%2Ffile ,这是不那么好)?

就是我建议(网址适配器)来完成其他地方? 还是有更深层次的原因,这是误导?

Answer 1:

有没有在可可没有内置的适配器,但写自己的使用NSURLProtocol是大多数使用非常简单。 给定一个任意URL编码它像这样看起来简单:

myscheme:<originalurl>

例如:

myscheme:http://example.com/path

简单地说,NSURL实际上只关心如果传递的字符串是一个有效的URI,这上面是。 是的,有那么多的网址支持在上面运行,根据各地RFC 1808等,但是这不是必需的。

所有这一切需要的是一个有效的URI是一个冒号,表示该计划,并没有无效字符(基本上,ASCII无空格)。

然后,您可以使用-resourceSpecifier方法来检索原始URL,并与工作。



文章来源: Custom URL scheme as adapter on existing URL schemes