WinSock - Je opravdu nepoužitelný ?

Úvodem
Tím nadpisem bych nerad rozpoutával nějakou velkou diskusi, ve které se mezi sebou navzájem rozhádají lidi co WinSock OCX používají a lidi co ne, ať už z jakéhokoliv důvodu. Já osobně taky raději WinSock moc nepoužívám pokud nemusím - a zatím jsem opravdu nemusel :)

Bohužel, při vývoji jedné aplikace pro mého klienta vyjádřil tento své jisté přání a znáte to - koho chléb jíš, toho píseň zpívej (pro ty co tomu nerozumí - platící uživatel si může říci o co chce). V podstatě to zase až tak hrozný požadavek nebyl - z rezervačního systému rozesílat SMS a E-maily s upozorněním klientům, pokud se dostali z místa náhradníka do skupiny lidí, co mají své místo na cvičení jisté.

S tím posíláním mailů jsem si zase až tak hlavu nelámal, spíš mě maličkato děsily ty SMS. Samozřejmě - je to platící zákazník, takže se mu případná komponenta na SMS nechá dát k proplacení. Trochu jsem pohledal a našel. Než byly zpoplatněny SMS brány na internetu, používal jsem aplikaci KubikSMS (mnozí z Vás jistě také). Je potěšitelné, že autoři pokračují ve vývoji dále, nyní pod názvem DreamCOM a mají některé užitečné věci včetně DLL knihoven pro posílání SMS přes různé brány (samozřejmě placené) za rozumnou "českou" cenu. Při prohledávání jejich webu jsem narazil na odkaz, který popisoval, jak posílat SMS přímo z vlastních stánek, což mi vnuklo nápad. Server mám, tak proč utrácet za komponentu, když si na něm mohu udělat PHP script, který SMS odešle. Akorát ... ten script je třeba aktivovat a předat mu parametry. Se slibně rozběhlou myšlenkou jsem se usadil za stroj, spustil svůj milovaný Visual Basic a v té chvíli mě napadlo, že stejně by šlo řešit i odesílání mailů. Geniální, jen to hodit do kódu.

První po čem člověk šáhne, je samozřejmě komponenta WinSock, to je to pravé ořechové :)

PHP scripty jsem měl raz dva, nahrnul jsem je k sobě na server, ve VB jsem do formuláře napral WinSock, tlačítko co nastavilo pár věcí komponentě a světe div se, ale přišel mi mail podle toho, co jsem poslal do scriptu. S pocitem vítězství jsem začal pracovat na zabudování řešení do mé aplikace, když najednou přišla rána - klient používá k přístupu na internet Proxy Server s autorizací !!!

Rychlým pohledem do helpu sem zjistil, že WinSock prostě normálním způsobem autorizaci na Proxy Serveru nepodporuje (čistě mezi námi, on toho nepodporuje daleko víc, ale tohle mě momentálně trápilo nejvíc).

WinSock OCX je prvek, který je připraven pro práci s TCP a UDP. Když si do projektu dáte prvek WebBrowser, a zadáte mu adresu, tak pokud jste připojeni přes Proxy Server s autorizací, je vyvolán dialog pro Vaší identifikaci. Když to umí WebBrowser, musí to přeci WinSock zvládnout taky, když jede po nižší vrstvě !

Zjednodušeně - použijme WinSock na HTTP komunikaci s cílem. Pokud mám přímé připojení k internetu, pak se WinSock připojí přímo k požadovanému serveru, my zašleme požadavek, server ho přes WinSock vrátí a je hotovo. Kdo znáte PHP tak víte, že když se pokoušíte stáhnout PHP stránku nestáhnete její zdroj, ale už pouze vygenerovaný kód, protože je stránka napřed zpracována a vy dostanete jenom výsledek (jsme na úrovni HTTP protokolu, ne FTP !!!!). Toho se dokonce nechá využít, je-li PHP script dobře napsán, k získávání návratových kódů zda operace ve scriptu proběhla v pořádku. Dokonce se takhle nechají scriptu předat parametry, i když pouze pomocí metody GET.

Připojuji-li se ale k internetu pomocí Proxy Serveru (ať již s autorizací či bez), pak komunikuji pouze s tímto Proxy Serverem, a moje požadavky on vyřizuje a on vrací výsledky - zjednodušeně řečeno, ale myslím že to pro názornost stačí.

Prostě - pokud si uživatel při konfiguraci spojení nastaví, že jede přes Proxy Server, musí vypadat HTTP požadavek trochu jinak než HTTP požadavek pokud jede přímo (i když ne o moc). Asi nejhorším problémem je případná autentizace na Proxy Serveru (potažmo na cílovém serveru pokud se jedná o chráněný zdroj). Je pravda, že většina serverů používá Základní autorizační schéma (BASE64), a s tím se nechá pracovat, ale bezpečnější servery pracují s Digitálním autorizačním schématem a to už je trochu o něčem jiném.

Takže to, co Vám tady chci v tomhle seriálku ukázat a k čemu jsem napsal tak nechutně dlouhej úvod je, jakým způsobem si stáhnout stránku k sobě na mašinu, pokud se jedná o připojení přes Proxy Server (s i bez autorizace) a pokud navíc je cílová stránka chráně autorizací hostitele. Tím stažením stránky se pak nechá obejít spousta věcí, právě díky chování PHP scriptů které jsem naznačil o něco dříve.

 Další

Autor: The Bozena

iReklama.cz - nový reklamní systém
iReklama.cz - nový reklamní systém