我如何创build自己的URL协议? (例如:// …)
好的,请耐心等待,因为这是很难解释的。
我见过…
http://www...
-
ftp://blah.blah...
-
file://blah.blah...
-
unreal://blah.blah...
-
mailto://blah.blah...
什么是第一部分,你看到http
等之类的?
我可以注册我自己的吗?
具有HTTP://
, FTP://
等的部分被称为URIscheme
您可以通过registry注册自己的。
HKEY_CLASSES_ROOT/ your-protocol-name/ (Default) "URL:your-protocol-name Protocol" URL Protocol "" shell/ open/ command/ (Default) PathToExecutable
资料来源: https : //www.iana.org/assignments/uri-schemes/uri-schemes.xhtml,http : //msdn.microsoft.com/en-us/library/aa767914( v= vs.85).aspx
打开记事本并粘贴下面的代码。 将“YourApp”更改为您的应用名称。 将其保存到YourApp.reg并通过在浏览器中单击执行它。 而已! 干杯! Erwin Haantjes
REGEDIT4 [HKEY_CLASSES_ROOT\YourApp] @="URL:YourApp Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\YourApp\DefaultIcon] @="\"C:\\Program Files\\YourApp\\YourApp.exe\"" [HKEY_CLASSES_ROOT\YourApp\shell] [HKEY_CLASSES_ROOT\YourApp\shell\open] [HKEY_CLASSES_ROOT\YourApp\shell\open\command] @="\"C:\\Program Files\\YourApp\\YourApp.exe\" \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\" \"%9\""
这对每个浏览器都是不同的,在IE和Windows中你需要创build他们所谓的可插拔协议处理程序。
基本步骤如下:
- 实现IInternetProtocol接口。
- 实现IInternetProtocolRoot接口。
- 实现IClassFactory接口。
- 可选的。 实现IInternetProtocolInfo接口。 交易处理程序提供对HTTP协议的支持。
- 如果实现了IInternetProtocolInfo,请提供对PARSE_SECURITY_URL和PARSE_SECURITY_DOMAIN的支持,以便URL安全区域pipe理器可以正确处理安全性。 编写你的协议处理程序的代码。
- 提供对BINDF_NO_UI和BINDF_SILENTOPERATION的支持。
- 在HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler下的registry中为您的协议处理程序添加一个子项。
- 在子项下创build一个string值CLSID,并将该string设置为协议处理程序的CLSID。
有关Windows端的更多详细信息,请参阅关于MSDN上的asynchronous可插入协议 。 在Windows SDK中还有一个示例。
一个快速谷歌也展示了这篇文章在codeproject上: http : //www.codeproject.com/KB/IP/DataProtocol.aspx 。
最后,作为一个安全人员,我必须指出,这个代码需要加强战斗力。 这是一个高风险,因为要做到这一点可靠,你不能在托pipe代码,并必须在C + +(我想你可以使用VB6)。 你应该考虑你是否真的需要这样做,如果你这样做,仔细devise和安全编码。 攻击者只需在页面上包含链接,即可轻松控制传递给您的内容。 例如,如果你有一个简单的缓冲区溢出,那么没有人更好的做到这一点: <a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>
强烈考虑使用strsafe和VC8及以上编译器中包含的新的安全CRT方法。 如果您不知道我在说什么,请参阅http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx 。
以下是注册的URIscheme的列表。 每个人都有一个RFC – 一个定义它的文档,几乎是一个标准。 RFC告诉开发人员新的应用程序(如浏览器,FTP客户端等)他们需要支持什么。 如果您需要一个新的基本级别的协议,您可以使用一个未注册的协议。 其他答案告诉你如何。 请记住,你可以用现有的协议做很多事情,从而获得现有的实现。
对于大多数Microsoft产品(Internet Explorer,Office,“打开文件”对话框等),您可以注册一个应用程序 ,当打开具有适当前缀的URI时运行。 这是更常见的解释的一部分 – 如何实现自己的协议。
对于Mozilla的解释是在这里 ,Java – 在这里 。
第一部分被称为协议,是的,你可以注册自己的。 在Windows(我假设你正在这样做给C#标记 – 对不起单声道粉丝),它通过registry完成。
这就是协议。 唯一阻止你制定自己的协议的是你必须:
- 编写一些浏览器或用户代理的某些了解该协议,无论是在其urlforms和实际的数据格式
- 写一个理解该协议的服务器
- 最好有一个协议的规范,以便浏览器和服务器可以继续一起工作。
Windows使#1真的很容易,在许多情况下,这是你真正需要的。 即:
将应用程序注册到URL协议
你不需要这样做任何注册。 我见过很多程序,比如emule,创build自己的protocol specific(这就是我所说的)。 之后,你基本上只需要在registry中设置一些值来处理那个协议。 我不确定是否有任何协议说明符的正式registry。 如果您希望人们从浏览器中打开您的应用程序,那么您无法阻止您为自己的应用程序创build自己的协议说明符。