¿Cómo puedo crear mi propio protocolo de URL? (e. g. so://...) [cerrado]


He visto:

  • http://www...
  • ftp://blah.blah...
  • file://blah.blah...
  • unreal://blah.blah...
  • mailto://blah.blah...

¿Cuál es esa primera sección donde se ve http y se llama así?

¿Puedo registrar el mío propio?

Author: Cœur, 2008-12-23

9 answers

La porción con el HTTP://,FTP://, etc se llaman Esquemas URI

Puede registrar el suyo propio a través del registro.

HKEY_CLASSES_ROOT/
  your-protocol-name/
    (Default)    "URL:your-protocol-name Protocol"
    URL Protocol ""
    shell/
      open/
        command/
          (Default) PathToExecutable

Fuentes: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml , http://msdn.microsoft.com/en-us/library/aa767914 (v=vs.85). aspx

 183
Author: James Gregory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-14 16:46:12

Abra el bloc de notas y pegue el siguiente código en él. Cambia "YourApp" por el nombre de tu app. Guárdatelo para ti.reg y ejecutarlo haciendo clic en él en el explorador. ¡Eso es! ¡Salud! 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\""
 51
Author: Codebeat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-01 22:23:36

Esto es diferente para cada navegador, en IE y Windows necesita crear lo que ellos llaman un controlador de protocolo conectable.

Los pasos básicos son los siguientes:

  1. Implementar la interfaz IInternetProtocol.
  2. Implementar la interfaz IInternetProtocolRoot.
  3. Implementa la interfaz IClassFactory.
  4. Opcional. Implementar la interfaz Iinternet Protocolinfo. El soporte para el protocolo HTTP es proporcionado por el manejador de transacciones.
  5. Si Iinternet Protocolinfo está implementado, proporciona soporte para PARSE_SECURITY_URL y PARSE_SECURITY_DOMAIN para que el administrador de la zona de seguridad URL pueda manejar la seguridad correctamente. Escriba el código para su controlador de protocolo.
  6. Proporciona soporte para BINDF_NO_UI y BINDF_SILENTOPERATION.
  7. Agregue una subclave para su controlador de protocolo en el registro bajo HKEY_CLASSES_ROOT\PROTOCOLS\Handler.
  8. Cree un valor de cadena, CLSID, bajo la subclave y establezca la cadena en el CLSID de su protocolo handler.

Vea Acerca de los protocolos conectables asíncronos en MSDN para más detalles en el lado de Windows. También hay un ejemplo en el SDK de Windows.

Un rápido Google también mostró este artículo sobre codeproject: http://www.codeproject.com/KB/IP/DataProtocol.aspx .

Finalmente, como un tipo de seguridad tengo que señalar que este código necesita ser endurecido en la batalla. Está en un alto riesgo porque para hacerlo de manera confiable no puede hacerlo en código administrado y tiene que hacer en C++ (supongo que podrías usar VB6). Debe considerar si realmente necesita hacer esto y, si lo hace, diseñarlo cuidadosamente y codificarlo de forma segura. Un atacante puede controlar fácilmente el contenido que se le pasa simplemente incluyendo un enlace en una página. Por ejemplo, si tiene un desbordamiento de búfer simple, entonces nadie mejor que haga esto: <a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

Considere fuertemente el uso de strsafe y los nuevos métodos seguros CRT incluidos en los compiladores VC8 y superiores. Ver http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx si no tienes idea de lo que estoy hablando.

 38
Author: Peter Oehlert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-08 03:46:44

Aquí hay una lista de los esquemas URI registrados. Cada uno tiene un RFC-un documento que lo define, que es casi un estándar. El RFC informa a los desarrolladores de nuevas aplicaciones (como navegadores, clientes ftp, etc.).) lo que necesitan apoyar. Si necesita un nuevo protocolo de nivel base, puede usar uno no registrado. Las otras respuestas te dicen cómo. Tenga en cuenta que puede hacer muchas cosas con los protocolos existentes, obteniendo así sus implementaciones existentes.

 17
Author: Yuval F,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-23 15:57:55

Para la mayoría de los productos de Microsoft (Internet Explorer, Office, diálogos "abrir archivo", etc.) puede registrar una aplicación que se ejecutará cuando se abra el URI con el prefijo apropiado. Esta es una parte de la explicación más común - cómo implementar su propio protocolo.

Para Mozilla, la explicación es aquí, Java - aquí.

 4
Author: Dmitry Khalatov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-23 16:14:35

Se llama protocolo. Lo único que te impide hacer tu propio protocolo es que tienes que:

  1. Escribir un navegador o agente de usuario de algún tipo que entienda ese protocolo, tanto en su forma URL como en el formato de datos real
  2. Escribir un servidor que entienda ese protocolo
  3. Preferiblemente, tenga una especificación para el protocolo para que el navegador y el servidor puedan continuar trabajando juntos.

Windows hace # 1 realmente fácil, y en muchos casos esto es todo lo que necesitas. Viz:

Registrar una aplicación en un Protocolo URL

 2
Author: JSBձոգչ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-23 15:59:01

La primera sección se llama protocolo y sí puede registrar el suyo propio. En Windows (donde asumo que estás haciendo esto dada la etiqueta C# - sorry Mono fans), se hace a través del registro.

 1
Author: GaryF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-23 15:58:56

Un Protocolo?

Encontré esto, parece ser una configuración local para un equipo...

Http://kb.mozillazine.org/Register_protocol

 0
Author: Hugoware,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-23 19:02:15

Realmente no tienes que hacer ningún registro como tal. He visto muchos programas, como emule, crear su propio protocolo specificier (así es como creo que se llama). Después de eso, básicamente solo tiene que establecer algunos valores en el registro en cuanto a qué programa maneja ese protocolo. No estoy seguro si hay algún registro oficial de especificadores de protocolo. Realmente no hay mucho que te impida crear tu propio especificador de protocolo para tu propia aplicación si quieres que la gente abra tu aplicación desde su navegador.

 -8
Author: Kibbee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-23 15:49:08