jak odesílat data na cizí servery
Jak udělat parazitní formulář - Příklad s vyhledávačem - Odesílaný dotaz - Skrytá pole - Přípustné úpravy - Další příklady - Analýza dotazu
Jak už jsem zmínil v úvodu do formulářů,
Jedním z řešení funkčnosti je využití programů na cizích serverech, které umějí věc, kterou potřebuji.
Formulář se prostě namíří na cizí stránku, pošle jí data a nechá ji zobrazit výsledky. Výsledná stránka pak sice nebude moje, ale bude to fungovat.
Pro nedostatek terminologie označuji takové použití formulářů za parazitní. Není to ale přesné, ve skutečnosti se jedná spíše o symbiózu, protože "zneužívaný" server nijak neutrpí a přijdou tak na něj noví uživatelé.
Nejlépe je zkopírovat jej. Najdu si stránku, která se mi líbí a vezmu z ní formulář (nejčastěji zkopírováním zdroje). Většinou se pak formulář ještě musí trochu upravit (hlavně action).
Jiný způsob je analýza serverových dotazů metody get. To je spíše pro pokročilejší.
Můj oblíbený vyhledávač je Google sídlící na adrese http://www.google.com. Zobrazil jsem si jeho zdroj a zkopíroval formulář s tímto HTML zápisem (zestručněno):
<form action=/search name=f>
<input type=text value="" name=q size=55 maxlength=256><br>
<input name=btnG type=submit value="Vyhledat Googleem">
<input name=hl type=hidden value=cs></form>
Když si tento formulář vložím do stránky, mám skoro vyhráno. Ještě jej ale trochu upravím (a vysvětlím jednotlivé části).
Jediná nezbytná úprava spočívá v namíření formuláře na správnou adresu. V původním formuláři byla relativní adresa "/search". Původní formulář ale sídlil na jiné adrese, takže to funguje jenom z té původní adresy. Musí se to opravit na absolutní adresu; většinou tak, že se před původní action napíše umístění původní stránky (popř. beze jména souboru).
action="http://www.google.com/search"
Výsledky parazitních formulářů se většinou nechávají otevírat v novém okně (není podmínkou). Do tagu form se dopíše atribut target="_blank". Celý formulář potom bude vypadat takto:
<form action="http://www.google.com/search"
target="_blank">
<input type=text value="" name=q size=55 maxlength=256><br>
<input name=btnG type=submit value="Vyhledat Googleem">
<input name=hl type=hidden value=cs></form>
A mohlo by to fungovat. Zkuste.
Když zadám hledaný text (třeba Prachatice) a zmáčknu Enter, odešle se na adresu www.google.com/search dotaz, který je k nerozeznání od dotazu, který by pocházel z původního formuláře:
http://www.google.com/search?q=Prachatice&hl=cs
Dotaz za otazníkem obsahuje vždy dvojici jméno=hodnota. Jména se berou z atributů name jednotlivých vstupních políček (inputů). Hodnotou je buď to, co zadal uživatel, nebo přednastavená hodnota (atribut value).
Pokud je pro vás odesílaný dotaz záhadou, přečtěte si úvod do formulářů.
Co znamená ten řádek
?
<input name=hl type=hidden value=cs>
Odesílá skrytá data. Prostě připojí do dotazu dvojici hl=cs. Používá se pro hodnoty, do kterých uživateli nic není a neměl by je měnit, pro účely programu jsou ale nezbytné.
Přesně nevím, co znamená to jméno hl a hodnota cs (asi že se budou výsledky komentovat česky). To ale není důležité, to jsem jen zkopíroval.
Většina kopírovaných cizích formulářů bude obsahovat skrytá pole, jimž nebudete rozumět. Můžete je zkusit smazat a sledovat, jestli to přestane fungovat (je to otázka ceny vašeho času).
Většina cizích formulářů se napřed musí očistit od cizího balastu. Je dobré smazat tagy tabulek, písem a skriptů. Nejlépe se pracuje jenom s čistou kostrou formuláře, kterou tvoří pouze tagy <form>, <input>, <select>, <textarea> (a zřídka některé další). Pokud si nejste jisti syntaxí, nastudujte si zápis vzhledu formulářových polí.
Důležité je pouze to, aby se nějak nepokazil dotaz, který se bude z formuláře odesílat.
Vyhledávání na Atlasu
Hledání práce na Jobpilot
Vyhledávání Googlem na vlastním serveru
SMS na Oskara
Hledání na Seznamu
Protože se mohou měnit cílové skripty, je možné, že příklady časem nebudou funkční.
<form action="http://www.atlas.cz/search.asp"
method="get">
<input type="text" name="searchtext" size="12">
<input type="submit" value="Najdi na Atlasu" >
</form>
Malý komentář: vidíte, že action míří na stránku s příponou .asp. To je stránka napsaná v jazyce ASP, která umí zpracovávat dotazy. Protože je to ASP, tak se nedá zaměnit method="get" na method="post" (což lze zaměňovat třeba u PHP).
Name="searchtext" je velice důležité zachovat, protože ta asp stránka se bude ptát na hodnotu spojenou se "searchtext".
<form action="http://www.jobpilot.cz/job_suche/search.phtml"
method="get" target="_blank">
Práce v Jobpilotu: <input type="text" name="keywords"
size="12" maxlenght="100">
<input type="submit" value="Hledat" >
</form>
Action nám nyní míří na soubor s příponou phtml, což je PHP skript. Proto je nyní možné zadat i method="post", ale u takto malého dotazu se to nevyplatí.
Opět je nutno zachovat name="keywords", protože PHP skript bude čekat hodnotu proměnné $query. Ve vstupním poli vidíme omezení dotazu na sto znaků (maxlenght=100), třebaže najednou jich bude vidět jenom 12 (size=12).
Na stránce pokročilého vyhledávání serveru Google se dá zvolit vyhledávání jenom v určité doméně nebo webu. Po úpravě vypadá formulář takto:
Vyhledávání na tomto serveru: <form
action="http://www.google.com/search" target="_blank">
<input type="text" name="as_q" size=20>
<input type="hidden" name="as_sitesearch"
value="dusan.pc-slany.cz">
<input type="hidden" name="num" value="10">
<input type="hidden" name="btnG" value="Vyhledat">
<input type="submit" value="Vyhledat">
</form>
Změníte-li adresu v políčku as_sitesearch na fragment své domény, můžete si takto udělat vyhledávání na vlastním serveru. (Problém je, že se tam už nesmějí používat lomítka.) Podmínkou je, aby k vám chodil indexovat Google (je to pravděpodobné). Přenastavením zřejmých hodnot skrytých polí můžete měnit výsledky; např. ta desítka u num je počet zobrazených výsledků na stránce.
Z adresy http://sms.oskarmobil.cz/s_main.php3 jsem zkopíroval formulář, který měl action nastavenou takto:
action="send.php3?locale=cz"
Výsledná adresa action tedy bude action="http://sms.oskarmobil.cz/send.php3?locale=cz"
Celý formulář po smazání balastu vypadá takto:
<form name="sms"
action="http://sms.oskarmobil.cz/send.php3?locale=cz"
method="post" target="_blank">
Telefonní číslo příjemce: +420
<select name="predcisli" size="1">
<option value="0608" selected>608</option>
<option value="0776">776</option>
<option value="0777">777</option>
</select>
<input type="Text" name="number" size="6" maxlength="6">
<input type="hidden" name="ppp" value="100906003088924:02f897c004b89437065b1dd960c3acfe">
<br>
ZPRÁVA (bez diakritiky): <br>
<textarea name="message" cols="60" rows="8" maxlength="779"></textarea>
<br>
<input name="sb" type="submit" value="Odeslat zprávu"> <input type="reset" value="Vymazat"
>
</form>
Ze stránky jsem odstranil JavaSkripty, které počítají počet znaků a esemesek. Mohly by se tam nechat a fungovalo by to. To pro výsledek ale není podstatné, protože si server musí umět poradit i se vstupy z prohlížečů, kde je JavaScript zakázán.
Textová oblast se zprávou má nastavenu maximální délku 779 znaků, což je většinou dobrá ochrana (dá se sice zlomit, ale těžko omylem).
Jediné, co mě straší, je skrytá hodnota name="ppp" s obrovským vygenerovaným řetězcem. Pravděpodobně zabraňuje zneužití formuláře (takže to možná bude hlásit, že stránka vypršela).
Někdy nemusím ani chodit na stránku s původním formulářem. Stačí mi, když znám dotaz, který formulář odesílal. Takové dotazy se nejčastěji najdou při analýze log souborů (sledování přístupů). Podle nich jsem si kdysi udělal vyhledávací centrálu.
http://search.centrum.cz/katalog/search.php?q=hudebn%ED+teorie
http://search.seznam.cz/search.cgi?min=l-s-c-k&w=Feynmanhttp://www.webfast.cz/search.php?q=warcraft&sec=mix&typ=std&top=0&from=21
http://search.msn.com/spbasic.htm?MT=CD%20LABELShttp://hledej.atlas.cz/fulltext.asp?query=famulus&from=41
http://google.yahoo.com/bin/query?p=frontpage+expres&hc=0&hs=0Například ze stránek těchto dotazů chodí čtenáři na moje stránky.
Tak dejme tomu, že ten dotaz ze Seznamu
http://search.seznam.cz/search.cgi?min=l-s-c-k&w=Feynman
přepracuji do parazitního formuláře:
<form action="http://search.seznam.cz/search.cgi"
target="_blank">
V katalogu Seznamu: <input name="w">
<input type="hidden" name="min"
value="l-s-c-k">
<input type="submit" value="Hledej!">
<form>
Předhozí: Detaily formulářů, zdokonalení vzhledu
Vizte též: Úvod do formulářů, Formuláře v HTML, Služby vzdálených serverů, Vytěžování stránek, Vyhledávací roboti
Obsah
Hledání
Základní kurs
Editory
HTML tipy
Provoz webu
CSS styly
Jak psát web:
http://dusan.pc-slany.cz/internet/
Píše Yuhů: autorova stránka, mail: dusan@pc-slany.cz
Poslední aktualizace 12.01.2002