Come posso creare il mio protocollo URL? (es. così: //…) [chiuso]


212

Ho visto:

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

Come si httpchiama quella prima sezione in cui vedi e simili?

Posso registrarmi da solo?


5
Non sono sicuro se questo richiede i tag c # e .net, è più ampio di così.
Rob Hruska,

È giusto. L'ho etichettato solo in quel modo perché stavamo pianificando di usare C # per implementare qualcosa del genere. Grazie comunque. :-)
Michael Beck,

14
Il nome corretto è "schema" (vedere RFC 2616 e 2396). Anche se molti schemi URL prendono il nome dai protocolli, ciò non implica che l'unico modo per accedere alla risorsa sia tramite il protocollo
Marek,

Esistono due tipi di protocolli, ma non so quale termine utilizzare per differenziarli. I protocolli "file" e "mailto" vengono elaborati nel client. I protocolli "http" e "ftp" vengono elaborati nel server. All'inizio ero confuso dalle risposte per i protocolli elaborati nel browser quando volevo qualcosa che veniva elaborato nel server.
user34660

Risposte:


203

La parte con la HTTP://, FTP://ecc sono chiamati schemi di URI

Puoi registrarti tramite il registro.

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

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


19
Che dire di sistemi operativi non Windows?
Bdoserror,

9
"Che dire di sistemi operativi non Windows?" È specifico dell'applicazione. Penso che in realtà sia spesso specifico dell'applicazione anche su Windows (questo non farà funzionare magicamente tutto).
Calum,

2
Definisci tutto. La voce di registro dice a Windows di passare l'Uri con quel protocollo all'applicazione specificata, tutto il resto dovrebbe essere gestito dall'applicazione stessa.
James Gregory,

5
Il gestore di protocollo innestabile è sicuramente una scelta migliore.

8
(Default)qui significa stringa vuota. Non prenderlo alla lettera.
Deerchao,

56

Apri il blocco note e incolla il codice sottostante. Cambia "YourApp" nel nome della tua app. Salvalo su YourApp.reg ed eseguilo facendo clic su di esso in Explorer. Questo è tutto! Saluti! 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
come chiamare da explorer, qual è l'url
imp

@imp, non è una buona idea chiamare i file .reg da (internet) explorer. Puoi usare il comando start per eseguire un file reg, come 'start yourregfile.reg', ma otterrai un messaggio dal sistema operativo per essere sicuro di aggiungerlo al registro. Per poterlo fare l'utente deve disporre dei privilegi di amministratore.
Codebeat

In realtà, sto facendo questa domanda su stackoverflow.com/questions/24265292/… .
imp

3
% 1% 2 ecc. Nel file reg sono gli argomenti della tua app. Quindi, se fai YourApp.exe "il tuo argomento", allora% 1 == "il tuo argomento"
Codebeat

1
conta solo% 1, non è possibile specificare nell'URL% 2 e% 3 ecc.
Trident D'Gao,

39

Questo è diverso per ogni browser, in IE e Windows è necessario creare quello che chiamano un gestore di protocollo collegabile.

I passaggi di base sono i seguenti:

  1. Implementare l'interfaccia IInternetProtocol.
  2. Implementare l'interfaccia IInternetProtocolRoot.
  3. Implementare l'interfaccia IClassFactory.
  4. Opzionale. Implementare l'interfaccia IInternetProtocolInfo. Il supporto per il protocollo HTTP è fornito dal gestore delle transazioni.
  5. Se IInternetProtocolInfo è implementato, fornire supporto per PARSE_SECURITY_URL e PARSE_SECURITY_DOMAIN in modo che il gestore della zona di sicurezza URL possa gestire correttamente la sicurezza. Scrivi il codice per il gestore del protocollo.
  6. Fornire supporto per BINDF_NO_UI e BINDF_SILENTOPERATION.
  7. Aggiungere una sottochiave per il gestore del protocollo nel registro in HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler.
  8. Creare un valore stringa, CLSID, sotto la sottochiave e impostare la stringa sul CLSID del gestore del protocollo.

Vedere Informazioni sui protocolli collegabili asincroni su MSDN per ulteriori dettagli sul lato Windows. C'è anche un esempio nell'SDK di Windows.

Un rapido google ha anche mostrato questo articolo su codeproject: http://www.codeproject.com/KB/IP/DataProtocol.aspx .

Infine, come addetto alla sicurezza, devo sottolineare che questo codice deve essere rafforzato in battaglia. È ad alto rischio perché per farlo in modo affidabile non puoi farlo in codice gestito e devi farlo in C ++ (suppongo che potresti usare VB6). Dovresti considerare se hai davvero bisogno di farlo e, se lo fai, progettalo attentamente e codificalo in modo sicuro. Un utente malintenzionato può facilmente controllare il contenuto che ti viene passato semplicemente includendo un link in una pagina. Ad esempio, se si dispone di un buffer overflow semplice, nessuno farebbe meglio a questo:<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

Prendi in considerazione l'idea di utilizzare strsafe e i nuovi metodi CRT sicuri inclusi nel compilatore VC8 e sopra. Vedi http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx se non hai idea di cosa sto parlando.


6
Questo è solo un esempio di qualcosa per invogliare gli utenti a fare clic su di esso.
Peter Oehlert,

per favore spiega questo: «perché per farlo in modo affidabile non puoi farlo in codice gestito e devi farlo in C ++»
LogicDaemon

2
Questo è da .Net 2.0 runtime (nota, incluso 3.0 e 3.5) timeframe. Non supportava diversi runtime CLR nello stesso processo, quindi se ho scritto un gestore 1.0 e tu ne hai scritto uno 2.0, e entrambi i nostri prodotti sono stati installati sul computer di un cliente, insieme assicureremmo che il browser si blocchi ogni volta è stato lanciato. Il runtime 4.0 ha tentato di risolvere questo problema, ma il mio ricordo è che c'erano ancora casi limite di cui preoccuparsi. Ma l'essenza sta usando oggetti .Net per plug-in nei processi nativi che doveva essere assolutamente evitato prima della 4.0 e potrebbe ancora avere dei casi angolari di cui preoccuparsi.
Peter Oehlert,

19

Ecco un elenco degli schemi URI registrati . Ognuno ha un RFC - un documento che lo definisce, che è quasi uno standard. RFC comunica agli sviluppatori di nuove applicazioni (come browser, client ftp, ecc.) Ciò di cui hanno bisogno per supportare. Se è necessario un nuovo protocollo di livello base, è possibile utilizzarne uno non registrato. Le altre risposte ti dicono come. Tieni presente che puoi fare molte cose con i protocolli esistenti, ottenendo così le loro implementazioni esistenti.


6
Nonostante i dettagli tecnici su come far funzionare un protocollo in Windows, questa è la risposta più importante. Non dovresti creare un nuovo schema URI a meno che non sia registrato con IETF o utilizzi uno spazio dei nomi sperimentale (come un prefisso X)
Alnitak,

4

Per la maggior parte dei prodotti Microsoft (Internet Explorer, Office, finestre di dialogo "Apri file", ecc.) È possibile registrare un'applicazione da eseguire quando viene aperto URI con prefisso appropriato. Questa è una parte della spiegazione più comune : come implementare il proprio protocollo.

Per Mozilla la spiegazione è qui , Java - qui .


2

Si chiama protocollo. L'unica cosa che ti impedisce di creare il tuo protocollo è che devi:

  1. Scrivi un browser o un agente utente di qualche tipo che comprenda quel protocollo, sia nella sua forma URL che nel formato dati effettivo
  2. Scrivi un server che capisca quel protocollo
  3. Preferibilmente, disporre di una specifica per il protocollo in modo che browser e server possano continuare a lavorare insieme.

Windows rende il numero 1 davvero semplice, e in molti casi questo è tutto ciò di cui hai effettivamente bisogno. Cioè:

Registrazione di un'applicazione su un protocollo URL


1

La prima sezione si chiama protocollo e sì, è possibile registrare il proprio. Su Windows (dove suppongo tu stia facendo questo dato il tag C # - scusate i fan di Mono), è fatto tramite il registro .



-10

Non è necessario effettuare alcuna registrazione in quanto tale. Ho visto molti programmi, come emule, creare il proprio protocollo più specifico (è quello che penso si chiami). Dopodiché, devi semplicemente impostare alcuni valori nel registro su quale programma gestisce quel protocollo. Non sono sicuro che esista un registro ufficiale degli identificatori di protocollo. Non c'è davvero molto che ti impedisce di creare il tuo identificatore di protocollo per la tua applicazione se vuoi che le persone aprano la tua app dal loro browser.


4
-1: guida errata, utilizza una nomenclatura imprecisa e non fornisce alcun valore reale
Marek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.