¿Cómo creo mi propio protocolo URL? (por ejemplo, así: // ...) [cerrado]

212

He visto:

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

¿Cómo se llama esa primera sección donde ves httpy similares?

¿Puedo registrar el mío?

Michael Beck
fuente
55
No estoy seguro de si esto necesita las etiquetas c # y .net, es más amplio que eso.
Rob Hruska,
Eso es justo. Solo lo etiqueté de esa manera porque estábamos planeando usar C # para implementar algo como esto. Gracias sin embargo. :-)
Michael Beck
14
El nombre correcto es "esquema" (ver RFC 2616 y 2396). Incluso si muchos esquemas de URL tienen nombres de protocolos, esto no implica que la única forma de acceder al recurso sea a través del protocolo
Marek, el
Hay dos tipos de protocolos, pero no sé qué término usar para diferenciarlos. Los protocolos "archivo" y "mailto" se procesan en el cliente. Los protocolos "http" y "ftp" se procesan en el servidor. Al principio me confundieron las respuestas para los protocolos procesados ​​en el navegador cuando quiero algo que se procesa en el servidor.
user34660

Respuestas:

203

La parte con el HTTP://, FTP://, etc son llamados esquemas de URI

Puede registrar la suya 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

James Gregory
fuente
19
¿Qué pasa con los sistemas operativos que no son de Windows?
Bdoserror
9
"¿Qué pasa con los sistemas operativos que no son de Windows?" Es específico de la aplicación. Creo que en realidad también suele ser específico de la aplicación en Windows (esto no hará que todo funcione mágicamente).
Calum
2
Define todo. La entrada del registro le dice a Windows que pase el Uri con ese protocolo a la aplicación especificada, todo lo demás debe ser manejado por la aplicación misma.
James Gregory el
55
El controlador de protocolo enchufable es definitivamente una mejor opción.
8
(Default)aquí significa cadena vacía. No lo tomes literalmente.
deerchao 05 de
56

Abra el bloc de notas y pegue el siguiente código en él. Cambia "YourApp" por el nombre de tu aplicación. Guárdelo en YourApp.reg y ejecútelo 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\""
Codebeat
fuente
2
cómo llamar desde el explorador, cuál es la url
imp
@imp, no es una idea inteligente llamar a los archivos .reg desde el explorador (internet). Puede usar el comando de inicio para ejecutar un archivo de registro, como 'start yourregfile.reg', pero recibirá un mensaje del sistema operativo para asegurarse de agregarlo al registro. Para poder hacer esto, el usuario debe tener privilegios de administrador.
Codebeat
En realidad, estoy preguntando sobre esta pregunta stackoverflow.com/questions/24265292/… .
imp
3
El% 1% 2, etc. en el archivo de registro son los argumentos para su aplicación. Entonces, si hace YourApp.exe "su argumento", entonces% 1 == "su argumento"
Codebeat
1
solo% 1 importa, no hay forma de especificar en la url% 2 y% 3, etc.
Trident D'Gao
39

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

Los pasos básicos son los siguientes:

  1. Implemente la interfaz IInternetProtocol.
  2. Implemente la interfaz IInternetProtocolRoot.
  3. Implemente la interfaz IClassFactory.
  4. Opcional. Implemente la interfaz IInternetProtocolInfo. El manejador de transacciones proporciona soporte para el protocolo HTTP.
  5. Si se implementa IInternetProtocolInfo, brinde soporte para PARSE_SECURITY_URL y PARSE_SECURITY_DOMAIN para que el administrador de la zona de seguridad de URL pueda manejar la seguridad correctamente. Escriba el código para su controlador de protocolo.
  6. Brindar soporte para BINDF_NO_UI y BINDF_SILENTOPERATION.
  7. Agregue una subclave para su controlador de protocolo en el registro en HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler.
  8. Cree un valor de cadena, CLSID, debajo de la subclave y establezca la cadena en el CLSID de su controlador de protocolo.

Consulte Acerca de los protocolos conectables asincrónicos en MSDN para obtener más detalles sobre el lado de Windows. También hay una muestra 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 agente de seguridad, debo señalar que este código debe ser reforzado. Está en un alto riesgo porque para hacerlo de manera confiable no puede hacerlo en código administrado y tiene que hacerlo en C ++ (supongo que podría 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 seriamente usar strsafe y los nuevos métodos CRT seguros incluidos en los compiladores VC8 y superiores. Consulte http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx si no tiene idea de lo que estoy hablando.

Peter Oehlert
fuente
66
Eso es solo un ejemplo de algo para atraer a los usuarios a hacer clic en él.
Peter Oehlert el
explique esto: «porque para hacerlo de manera confiable no puede hacerlo en código administrado y tiene que hacerlo en C ++»
LogicDaemon
2
Esto es del tiempo de ejecución de .Net 2.0 (nota, esto incluye 3.0 y 3.5). No admitía diferentes tiempos de ejecución CLR en el mismo proceso, por lo que si escribí un controlador 1.0 y usted escribió uno 2.0, y nuestros dos productos se instalaron en la computadora de un cliente, juntos nos aseguraríamos de que el navegador se bloquee cada vez Se lanzó. El tiempo de ejecución 4.0 intentó abordar este problema, pero recuerdo que todavía había casos límite por los que preocuparse. Pero lo esencial es usar objetos .Net para complementos en procesos nativos que se deben evitar por completo antes de 4.0 y aún pueden tener casos de preocupación.
Peter Oehlert
19

Aquí hay una lista de los esquemas de URI registrados . Cada uno tiene un RFC, un documento que lo define, que es casi un estándar. El RFC les dice a los desarrolladores de nuevas aplicaciones (como navegadores, clientes ftp, etc.) lo que necesitan para soportar. 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.

Yuval F
fuente
66
A pesar de los detalles técnicos de cómo hacer que un protocolo funcione en Windows, esta es la respuesta más importante. No debe crear un nuevo esquema de URI a menos que esté registrado con IETF o con un espacio de nombres experimental (como un prefijo X)
Alnitak
4

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

Para Mozilla, la explicación está aquí , Java, aquí .

Dmitry Khalatov
fuente
2

Se llama el protocolo. Lo único que le impide hacer su propio protocolo es que debe:

  1. Escriba un navegador o agente de usuario de algún tipo que comprenda ese protocolo, tanto en su forma de URL como en el formato de datos real
  2. Escribe 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 que el n. ° 1 sea realmente fácil, y en muchos casos esto es todo lo que realmente necesita. Verbigracia:

Registrar una aplicación en un protocolo URL

JSB ձոգչ
fuente
1

La primera sección se llama protocolo y sí, puede registrar el suyo. En Windows (donde supongo que está haciendo esto dada la etiqueta C #, lo siento, fanáticos de Mono), se realiza a través del registro .

GaryF
fuente
-10

Realmente no tienes que registrarte como tal. He visto muchos programas, como emule, crear su propio protocolo más específico (eso es lo que creo que se llama). Después de eso, básicamente solo tiene que establecer algunos valores en el registro sobre qué programa maneja ese protocolo. No estoy seguro de 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.

Kibbee
fuente
44
-1: guía equivocada, usa una nomenclatura inexacta y no proporciona ningún valor real
Marek