239 votes

Comment créer mon propre protocole URL ? (par exemple so://...)

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 http et autres appelés ?

Puis-je enregistrer le mien ?

20 votes

Le nom correct est "scheme" (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 soit le protocole.

1 votes

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 par le client. Les protocoles "http" et "ftp" sont traités par le serveur. Au début, j'étais confus par les réponses pour les protocoles traités dans le navigateur alors que je veux quelque chose qui est traité dans le serveur.

232voto

James Gregory Points 10400

La partie avec le HTTP:// , FTP:// etc. sont appelés Schémas URI

Vous pouvez enregistrer le vôtre par le biais du 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

23 votes

Qu'en est-il des systèmes d'exploitation non Windows ?

10 votes

"Qu'en est-il des systèmes d'exploitation non Windows ?" C'est spécifique à l'application. Je pense que c'est en fait fréquemment spécifique à l'application sous Windows aussi (cela ne fera pas tout fonctionner par magie).

3 votes

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 devant être géré par l'application elle-même.

58voto

Erwinus Points 1587

Ouvrez le bloc-notes et collez-y le code ci-dessous. Remplacez "YourApp" par le nom de votre application. Enregistrez-le sous YourApp.reg et exécutez-le en cliquant dessus dans l'explorateur. C'est tout ! A la vôtre ! 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\""

2 votes

Comment appeler depuis l'explorateur, quelle est l'url ?

0 votes

@imp, ce n'est pas une bonne idée d'appeler des fichiers .reg à partir de l'explorateur (internet). Vous pouvez utiliser la commande start pour exécuter un fichier reg, comme 'start yourregfile.reg' mais vous obtiendrez un message d'invite de l'OS pour être sûr de l'ajouter au registre. Pour pouvoir le faire, l'utilisateur doit avoir des privilèges d'administrateur.

1 votes

En fait, je pose la question suivante stackoverflow.com/questions/24265292/ .

40voto

Peter Oehlert Points 6351

Cette procédure est différente 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émente l'interface IInternetProtocol.
  2. Implémente l'interface IInternetProtocolRoot.
  3. Implémente l'interface IClassFactory.
  4. En option. Implémenter l'interface IInternetProtocolInfo. La prise en charge du protocole HTTP est assurée par le gestionnaire de transactions.
  5. Si IInternetProtocolInfo est implémenté, fournir un support pour PARSE_SECURITY_URL et PARSE_SECURITY_DOMAIN afin que le gestionnaire de zone de sécurité URL puisse gérer la sécurité correctement. Écrivez le code de votre gestionnaire de protocole.
  6. Fournir un support 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.

Une recherche rapide sur Google a également montré cet article sur codeproject : http://www.codeproject.com/KB/IP/DataProtocol.aspx .

Enfin, en tant que spécialiste de la sécurité, je dois souligner que ce code doit être renforcé. Il est à haut risque parce que pour le faire de manière fiable, vous ne pouvez pas le faire en code géré et devez le faire en C++ (je suppose que vous pourriez utiliser VB6). Vous devriez vous demander si vous avez vraiment besoin de le faire et, si c'est le cas, le concevoir soigneusement et le coder de manière sécurisée. Un attaquant peut facilement contrôler le contenu qui vous est transmis en incluant simplement un lien sur une page. Par exemple, si vous disposez d'un simple dépassement de tampon, personne n'a intérêt à le faire : <a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

Il est fortement recommandé 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 n'avez aucune idée de ce dont je parle.

7 votes

Ce n'est qu'un exemple d'élément destiné à inciter les utilisateurs à cliquer dessus.

0 votes

Expliquez-moi ça : "parce que pour le faire de manière fiable, vous ne pouvez pas le faire en code géré et vous devez le faire en C++".

2 votes

Il s'agit de la période d'exécution de .Net 2.0 (note, cela inclut 3.0 et 3.5). Il ne supportait pas différents runtimes CLR dans le même processus, donc si j'ai écrit un handler 1.0 et que vous avez écrit un handler 2.0, et que nos deux produits étaient installés sur l'ordinateur d'un client, nous nous assurions ensemble que le navigateur plante à chaque lancement. Le runtime 4.0 a tenté de résoudre ce problème, mais je me souviens qu'il y avait encore des cas limites à prendre en compte. Mais l'essentiel est que l'utilisation d'objets .Net pour des plugins dans des processus natifs devait être absolument évitée avant la version 4.0 et qu'il y a encore des cas limites à prendre en compte.

19voto

Yuval F Points 15248

Voici la liste des inscrits Schémas URI . Chacun d'entre eux possède un RFC, un document qui le définit et qui est presque une norme. La RFC indique aux développeurs de nouvelles applications (comme les navigateurs, les clients FTP, etc.) ce qu'ils doivent 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 indiquent comment procéder. Gardez à l'esprit que vous pouvez faire beaucoup de choses avec les protocoles existants, en bénéficiant ainsi de leurs implémentations existantes.

6 votes

Indépendamment des détails techniques sur la manière de faire fonctionner un protocole sous Windows, c'est la réponse la plus importante. Vous ne devriez pas créer un nouveau schéma URI à moins qu'il ne soit enregistré auprès de l'IETF ou qu'il utilise un espace de noms expérimental (comme un préfixe X).

4voto

Dmitry Khalatov Points 2172

Pour la plupart des produits Microsoft (Internet Explorer, Office, boîtes de dialogue "Ouvrir un fichier", etc. enregistrer une demande à exécuter lorsque l'URI avec le préfixe approprié est ouvert. Il s'agit d'une partie de la commande plus commune explication - comment mettre en œuvre votre propre protocole.

Pour Mozilla, l'explication est la suivante aquí Java - aquí .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X