Comment créer mon propre protocole URL? (par exemple: //…) [fermé]

212

J'ai vu:

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

Quelle est cette première section où vous voyez httpet ainsi appelé?

Puis-je enregistrer le mien?

Michael Beck
la source
5
Je ne sais pas si cela nécessite les balises c # et .net, c'est plus large que cela.
Rob Hruska
C'est juste. Je ne l'ai tagué que de cette façon parce que nous prévoyions d'utiliser C # pour implémenter quelque chose comme ça. Merci quand même. :-)
Michael Beck
14
Le nom correct est "schéma" (voir RFC 2616 et 2396). Même si de nombreux schémas d'URL sont nommés d'après des protocoles, cela n'implique pas que le seul moyen d'accéder à la ressource est via le protocole
Marek
Il existe deux types de protocoles mais je ne sais pas quel terme utiliser pour les différencier. Les protocoles "file" et "mailto" sont traités dans le client. Les protocoles "http" et "ftp" sont traités sur le serveur. Au début, j'ai été confus par les réponses aux protocoles traités dans le navigateur lorsque je veux quelque chose qui est traité sur le serveur.
user34660

Réponses:

203

La partie la HTTP://, FTP://, etc. sont appelés schémas d' URI

Vous pouvez enregistrer le vôtre via le registre.

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

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

James Gregory
la source
19
Qu'en est-il des systèmes d'exploitation non Windows?
Bdoserror
9
"Qu'en est-il des systèmes d'exploitation non Windows?" C'est spécifique à l'application. Je pense que c'est en fait souvent spécifique à l'application sur Windows (cela ne fera pas fonctionner tout comme par magie).
Calum
2
Définissez tout. L'entrée de registre indique à Windows de transmettre l'URI avec ce protocole à l'application spécifiée, tout le reste doit être géré par l'application elle-même.
James Gregory
5
Le gestionnaire de protocole enfichable est certainement un meilleur choix.
8
(Default)signifie ici une chaîne vide. Ne le prenez pas au pied de la lettre.
deerchao
56

Ouvrez le bloc-notes et collez-y le code ci-dessous. Remplacez «YourApp» par le nom de votre application. Enregistrez-le dans YourApp.reg et exécutez-le en cliquant dessus dans l'explorateur. C'est tout! À votre santé! 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
la source
2
comment appeler depuis l'explorateur, quelle est l'url
imp
@imp, ce n'est pas une bonne idée d'appeler des fichiers .reg depuis (Internet) explorer. Vous pouvez utiliser la commande start pour exécuter un fichier reg, comme «start yourregfile.reg» mais vous obtiendrez un message d'invite du système d'exploitation pour être sûr de l'ajouter au registre. Pour cela, l'utilisateur doit disposer de privilèges d'administrateur.
Codebeat
En fait, je pose des questions sur cette question stackoverflow.com/questions/24265292/… .
imp
3
Les% 1% 2 etc. du fichier reg sont les arguments de votre application. Donc, si vous faites YourApp.exe "votre argument" alors% 1 == "votre argument"
Codebeat
1
seul% 1 compte, il n'y a aucun moyen de spécifier dans l'url% 2 et% 3 etc
Trident D'Gao
39

Ceci est différent pour chaque navigateur, dans IE et Windows, vous devez créer ce qu'ils appellent un gestionnaire de protocole enfichable.

Les étapes de base sont les suivantes:

  1. Implémentez l'interface IInternetProtocol.
  2. Implémentez l'interface IInternetProtocolRoot.
  3. Implémentez l'interface IClassFactory.
  4. Optionnel. Implémentez l'interface IInternetProtocolInfo. La prise en charge du protocole HTTP est fournie par le gestionnaire de transactions.
  5. Si IInternetProtocolInfo est implémenté, prenez en charge PARSE_SECURITY_URL et PARSE_SECURITY_DOMAIN pour que le gestionnaire de zone de sécurité URL puisse gérer correctement la sécurité. Écrivez le code de votre gestionnaire de protocole.
  6. Fournissez une assistance pour BINDF_NO_UI et BINDF_SILENTOPERATION.
  7. Ajoutez une sous-clé pour votre gestionnaire de protocole dans le Registre sous HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler.
  8. Créez une valeur de chaîne, CLSID, sous la sous-clé et définissez la chaîne sur le CLSID de votre gestionnaire de protocole.

Voir À propos des protocoles enfichables asynchrones sur MSDN pour plus de détails sur le côté Windows. Il existe également un exemple dans le SDK Windows.

Un rapide google a également montré cet article sur codeproject: http://www.codeproject.com/KB/IP/DataProtocol.aspx .

Enfin, en tant que responsable de la sécurité, je dois souligner que ce code doit être renforcé. C'est à haut risque car pour le faire de manière fiable, vous ne pouvez pas le faire en code managé et devez le faire en C ++ (je suppose que vous pourriez utiliser VB6). Vous devez vous demander si vous avez vraiment besoin de le faire et si c'est le cas, concevez-le soigneusement et codez-le en toute sécurité. Un attaquant peut facilement contrôler le contenu qui vous est transmis en incluant simplement un lien sur une page. Par exemple, si vous avez un débordement de tampon simple, personne ne fera mieux ceci:<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

Envisagez fortement d'utiliser strsafe et les nouvelles méthodes CRT sécurisées incluses dans les compilateurs VC8 et supérieurs. Voir http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx si vous ne savez pas de quoi je parle.

Peter Oehlert
la source
6
Ce n'est qu'un exemple de quelque chose pour inciter les utilisateurs à cliquer dessus.
Peter Oehlert
veuillez expliquer ceci: «parce que pour le faire de manière fiable, vous ne pouvez pas le faire en code managé et devez le faire en C ++»
LogicDaemon
2
Il s'agit de la période d'exécution de .Net 2.0 (notez que cela inclut les délais 3.0 et 3.5). Il ne prenait pas en charge différents temps d'exécution CLR dans le même processus, donc si j'écrivais un gestionnaire 1.0 et que vous en écriviez un 2.0, et que nos deux produits étaient installés sur un ordinateur client, ensemble, nous nous assurerions que le navigateur se bloque à chaque fois il a lancé. Le runtime 4.0 a tenté de cibler ce problème, mais je me souviens qu'il y avait encore des cas limites à craindre. Mais l'essentiel utilise des objets .Net pour les plugins dans les processus natifs devait être absolument évité avant 4.0 et peut encore avoir des cas de coin à s'inquiéter.
Peter Oehlert
19

Voici une liste des schémas d'URI enregistrés . Chacun a un RFC - un document le définissant, qui est presque un standard. Le RFC indique aux développeurs de nouvelles applications (comme les navigateurs, les clients ftp, etc.) ce dont ils ont besoin pour prendre en charge. Si vous avez besoin d'un nouveau protocole de base, vous pouvez utiliser un protocole non enregistré. Les autres réponses vous expliquent comment. N'oubliez pas que vous pouvez faire beaucoup de choses avec les protocoles existants, gagnant ainsi leurs implémentations existantes.

Yuval F
la source
6
Nonobstant les détails techniques sur la façon de faire fonctionner un protocole sous Windows - c'est la réponse la plus importante. Vous ne devez pas créer un nouveau schéma d'URI à moins qu'il ne soit enregistré auprès de l'IETF, ou en utilisant un espace de noms expérimental (comme un préfixe X)
Alnitak
4

Pour la plupart des produits Microsoft (Internet Explorer, Office, boîtes de dialogue "ouvrir un fichier", etc.), vous pouvez enregistrer une application à exécuter lorsque l'URI avec le préfixe approprié est ouvert. Ceci fait partie d'une explication plus courante - comment implémenter votre propre protocole.

Pour Mozilla, l'explication est ici , Java - ici .

Dmitry Khalatov
la source
2

Cela s'appelle le protocole. La seule chose qui vous empêche de créer votre propre protocole est que vous devez:

  1. Écrivez un navigateur ou un agent utilisateur de certains types qui comprend ce protocole, à la fois sous sa forme URL et dans le format de données réel
  2. Écrire un serveur qui comprend ce protocole
  3. De préférence, ayez une spécification pour le protocole afin que le navigateur et le serveur puissent continuer à fonctionner ensemble.

Windows rend le n ° 1 très simple, et dans de nombreux cas, c'est tout ce dont vous avez réellement besoin. Viz:

Enregistrement d'une application dans un protocole URL

JSB ձոգչ
la source
1

La première section s'appelle un protocole et oui, vous pouvez enregistrer le vôtre. Sous Windows (où je suppose que vous le faites compte tenu de la balise C # - désolé les fans de Mono), cela se fait via le registre .

GaryF
la source
-10

Vous n'avez pas vraiment besoin de vous inscrire comme tel. J'ai vu de nombreux programmes, comme emule, créer leur propre protocole spécifique (c'est ce que je pense que cela s'appelle). Après cela, il vous suffit de définir des valeurs dans le registre pour savoir quel programme gère ce protocole. Je ne sais pas s'il existe un registre officiel de spécificateurs de protocole. Il n'y a pas grand-chose pour vous empêcher de créer votre propre spécificateur de protocole pour votre propre application si vous voulez que les gens ouvrent votre application à partir de leur navigateur.

Kibbee
la source
4
-1: erreur, utilise une nomenclature inexacte et n'apporte aucune valeur réelle
Marek