Kendi URL protokolümü nasıl oluştururum? (örneğin: //…) [kapalı]


212

Ben gördüm:

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

Gördüğünüz ilk bölüm nedir httpve benzeri?

Kendi kayıt olabilir miyim?


5
Bunun c # ve .net etiketlerine ihtiyacı olup olmadığından emin değil, bundan daha geniştir.
Rob Hruska

Bu adil. Sadece bu şekilde etiketledim çünkü böyle bir şey uygulamak için C # kullanmayı planlıyorduk. Yine de teşekkürler. :-)
Michael Beck

14
Doğru ad "şema" dır (bkz. RFC 2616 ve 2396). Protokollerden sonra birçok URL şeması isimlendirilmiş olsa bile, bu kaynağa erişmenin tek yolunun protokol aracılığıyla olduğu anlamına gelmez
Marek

İki tür protokol vardır, ancak bunları ayırt etmek için hangi terimi kullanacağımı bilmiyorum. "Dosya" ve "mailto" protokolleri istemcide işlenir. "Http" ve "ftp" protokolleri sunucuda işlenir. İlk başta, sunucuda işlenen bir şey istediğimde tarayıcıda işlenen protokollerin cevapları ile kafam karıştı.
user34660

Yanıtlar:


203

İle kısmının HTTP://, FTP://vb denir URI Şemaları

Kayıt defterini kullanarak kendiniz kayıt olabilirsiniz.

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

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


19
Windows olmayan işletim sistemleri ne olacak?
Bdoserror

9
"Windows olmayan işletim sistemleri ne olacak?" Uygulamaya özeldir. Bence aslında Windows'ta da uygulamaya özel (bu her şeyi sihirli bir şekilde yapmayacak).
Calum

2
Her şeyi tanımlayın. Kayıt defteri girdisi, Windows'a belirtilen protokole Uri'yi belirtilen uygulamaya geçirmesini söyler, diğer her şey uygulamanın kendisi tarafından ele alınmalıdır.
James Gregory

5
Takılabilir protokol işleyici kesinlikle daha iyi bir seçimdir.

8
(Default)burada boş dize demektir. Kelimenin tam anlamıyla almayın.
deerchao

56

Not defterini açın ve aşağıdaki kodu içine yapıştırın. "Uygulamanız" ı uygulamanızın adıyla değiştirin. Bunu YourApp.reg dosyasına kaydedin ve explorer'da tıklayarak çalıştırın. Bu kadar! Şerefe! 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
explorer nasıl aramak, url nedir
imp

@imp, (internet) explorer'dan .reg dosyalarını çağırmak akıllıca bir fikir değildir. 'Start yourregfile.reg' gibi bir reg dosyasını yürütmek için start komutunu kullanabilirsiniz, ancak kayıt defterine eklediğinizden emin olmak için işletim sisteminden bir ileti alacaksınız. Bunu yapabilmek için kullanıcının yönetici ayrıcalıklarına sahip olması gerekir.
Codebeat

Aslında bu soruyu soruyorum stackoverflow.com/questions/24265292/… .
imp

3
Reg dosyasındaki% 1% 2 vb. Uygulamanız için bağımsız değişkenlerdir. Yani YourApp.exe yaparsanız "argümanınız" yani% 1 == "argümanınız"
Codebeat

1
sadece% 1 önemlidir,% 2 ve% 3
Trident D'Gao

39

Bu, her tarayıcı için farklıdır, IE ve pencerelerde takılabilir protokol işleyici dediklerini oluşturmanız gerekir.

Temel adımlar aşağıdaki gibidir:

  1. IInternetProtocol arabirimini uygulayın.
  2. IInternetProtocolRoot arabirimini uygulayın.
  3. IClassFactory arabirimini uygulayın.
  4. İsteğe bağlı. IInternetProtocolInfo arabirimini uygulayın. HTTP protokolü desteği, işlem işleyici tarafından sağlanır.
  5. IInternetProtocolInfo uygulanırsa, URL güvenlik bölgesi yöneticisinin güvenliği düzgün bir şekilde işleyebilmesi için PARSE_SECURITY_URL ve PARSE_SECURITY_DOMAIN için destek sağlayın. Protokol işleyicinizin kodunu yazın.
  6. BINDF_NO_UI ve BINDF_SILENTOPERATION için destek sağlayın.
  7. HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler altındaki kayıt defterine protokol işleyiciniz için bir alt anahtar ekleyin.
  8. Alt anahtarın altında bir dize değeri (CLSID) oluşturun ve dizeyi protokol işleyicinizin CLSID değerine ayarlayın.

Windows tarafında daha fazla ayrıntı için MSDN'deki Eşzamansız Takılabilir Protokoller Hakkında konusuna bakın . Windows SDK'sında da bir örnek vardır.

Hızlı bir google ayrıca codeproject ile ilgili bu makaleyi de gösterdi: http://www.codeproject.com/KB/IP/DataProtocol.aspx .

Son olarak, bir güvenlik görevlisi olarak bu kodun savaşın sertleştirilmesi gerektiğini belirtmek zorundayım. Güvenilir bir şekilde yapmak için yönetilen kodda yapamazsınız ve C ++ ile yapmalısınız (VB6 kullanabileceğinizi varsayalım). Bunu gerçekten yapmanız gerekip gerekmediğini ve bunu yaparsanız, dikkatlice tasarlayın ve güvenli bir şekilde kodlayın. Saldırgan, bir sayfaya bir bağlantı ekleyerek size iletilen içeriği kolayca kontrol edebilir. Örneğin, basit bir arabellek taşması varsa bunu kimse yapamaz:<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

Strsafe ve VC8 ve üstü derleyicilere dahil edilen yeni güvenli CRT yöntemlerini kullanmayı düşünün. Ne hakkında konuştuğum hakkında bir fikriniz yoksa http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx adresine bakın .


6
Bu, kullanıcıları tıklamaya ikna edecek bir şey örneğidir.
Peter Oehlert

lütfen bunu açıklayın: «güvenilir bir şekilde yapmak için yönetilen kodda yapamazsınız ve C ++ ile
yapamazsınız

2
Bu .Net 2.0 çalışma zamanından (not, bu 3.0 ve 3.5 dahil) zaman diliminden. Aynı işlemde farklı CLR çalışma zamanlarını desteklemedi, bu yüzden 1.0 işleyici yazdım ve 2.0 bir iş yazarsanız ve her iki ürünümüz de bir müşteri bilgisayarına yüklendiyse, birlikte tarayıcının her seferinde kilitlendiğinden emin oluruz başlattı. 4.0 çalışma zamanı bu sorunu hedeflemeye çalıştı, ancak hatırlamam hala endişe edilecek sınır vakaları vardı. Ancak öz, yerel işlemlerde eklentiler için .Net nesnelerini kullanıyor. 4.0'dan önce kesinlikle kaçınılması gerekiyordu ve hala endişelenecek köşe vakaları olabilir.
Peter Oehlert

19

Kayıtlı URI şemalarının listesi . Her birinin bir RFC'si vardır - onu tanımlayan bir belge, neredeyse standarttır. RFC, yeni uygulamaların geliştiricilerine (tarayıcılar, ftp istemcileri vb.) Neyi desteklemeleri gerektiğini söyler. Yeni bir temel düzey protokole ihtiyacınız varsa, kayıtlı olmayan bir protokol kullanabilirsiniz. Diğer cevaplar size nasıl olduğunu söyler. Mevcut protokollerle bir çok şey yapabileceğinizi, böylece mevcut uygulamalarını kazanabileceğinizi lütfen unutmayın.


6
Windows'da bir protokolün nasıl çalışacağına dair teknik detaylara rağmen - bu en önemli cevaptır. IETF'ye kayıtlı değilse veya deneysel bir ad alanı (X öneki gibi) kullanmadıkça yeni bir URI şeması oluşturmamalısınız
Alnitak


2

Buna protokol denir. Kendi protokolünüzü oluşturmanızı engelleyen tek şey:

  1. Hem URL formunda hem de gerçek veri biçiminde bu protokolü anlayan bazı türden tarayıcı veya kullanıcı aracısı yazın
  2. Bu protokolü anlayan bir sunucu yazın
  3. Tercihen, tarayıcı ve sunucunun birlikte çalışmaya devam edebilmesi için protokol için bir spesifikasyona sahip olun.

Windows # 1'i gerçekten kolaylaştırıyor, birçok durumda aslında ihtiyacınız olan tek şey bu. Yani:

Bir Uygulamayı URL Protokolüne Kaydetme


1

İlk bölüme protokol denir ve evet kendi protokolünüzü kaydedebilirsiniz. Windows'ta (C # etiketi göz önüne alındığında bunu yaptığınızı varsayıyorum - üzgünüm Mono hayranları), kayıt defteri aracılığıyla yapılır .



-10

Gerçekten böyle bir kayıt yapmak zorunda değilsiniz. Emule gibi birçok program gördüm, kendi protokol belirleyicilerini oluşturdum (buna göre olduğunu düşünüyorum). Bundan sonra, temel olarak, kayıt defterinde programın bu protokolü hangi şekilde işlediğine ilişkin bazı değerler ayarlamanız gerekir. Protokol belirteçlerinin resmi bir kayıt defteri olup olmadığından emin değilim. Kullanıcıların uygulamanızı tarayıcılarından açmasını istiyorsanız, kendi uygulamanız için kendi protokol belirleyicinizi oluşturmanızı engelleyecek pek bir şey yoktur.


4
-1: yanlış yönlendirici, yanlış isimlendirme kullanır ve gerçek bir değer sağlamaz
Marek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.