POST a GET cez HTTP pomocou VBS pre Windows Shell

AutomatorWindows Shell písaný v syntaxi Visual Basic je moderná (ok, skoro desať rokov stará) náhrada za MS-DOS „baťáky“ resp. trošku novšie „cmďáky“. Pokiaľ chcete byť za pravoverného Windowsáka, tak baťáky nevynášate ako najtech. Pokiaľ nepoznáte Windows Shell, tak nie ste Windowsák :) WSH je teda skriptovací jazyk na automatizáciu opakovaných činností. Bohužiaľ vyžaduje aj na triviálne záležitosti skôr programátora a jeho myslenie, takže len tak hocikto si neposkladá skript na automatizáciu rutinných činností.
Vyriešime si teraz jeden programátorský problém: chcel by som z desktopového počítača skriptom poslať „POST/GET“ požiadavku na skript uložený na nejakom webe. Preložím: skript vie poslať do formulára na nejakej webstránke dáta. Nemusím teda „ručne“ otvoriť tento web, vyplniť formulár a kliknúť na odoslať. Ak sa to opakuje, tak by som to chcel zautomatizovať.


Na webe je nejaký takýto formulár trebárs na adrese http://www.example.org/formular.html a obsahuje:
<FORM ACTION=” http://www.example.org/prijmi.php” METHOD=”POST”>
<INPUT NAME=”field1” VALUE=”Spravodaj” />
<BUTTON TYPE=”submit”></BUTTON>
</FORM>

Z toho nás zaujíma URL v ACTION, čo je skript, ktorý vie prijímať dáta cez POST či GET. Potom samozrejme názvy polí (v príklade field1). Viac nás to však nezaujíma, lebo náš skript to nevyužíva.
Dobre je vedieť, ako vyzerá prijmi.php – ide o jednoduchý skript, ktorý načíta dáta poslané cez POST/GET a nejako ich spracuje. Predpokladajme, že nám funguje :)
Teraz nás zaujíma VBS skript pre Windows Shell, ktorý vie do tohto skriptu poslať dáta.
Set objHTTP = CreateObject("Microsoft.XMLHTTP")
objHTTP.open "POST", "http://www.example.org/prijmi.php", False

objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.send "field1=Huhuhu"

MsgBox objHTTP.responseText

Set objHTTP = Nothing
Všimnite si v druhom riadku máme URL „prijímacieho“ skriptu, ktorý sme vydolovali z FORMu. Predtým je ešte parameter „POST“, kde môžeme podľa typu formulára zmeniť na „GET“.
Samotný príkaz na „vyplnenie“ položky vo formulári je objHTTP.send, kde vidíte ako to funguje.
Príkaz MsgBox je nevýznamný a počas behu skriptu len zobrazuje „blbosti“ a žiada nás kliknúť na OK, to si môžete po odladení skriptu odpustiť :)
Slabina tohto návodu je, že som Vám nedal príklad toho skriptu prijmi.php, predpokladám, že toto už by ste si mali urobiť buď sami alebo do neho aj tak nevidíte, lebo je to cudzí skript.
Veľký pozor: častokrát je prijímanie dát chránené rôznymi mechanizmami, aby sa práve nedalo posielanie dát do formulárov „uskriptovať“ a takto spamovať cudzie weby. Môj príklad funguje na naozaj jednoduché formuláre. Smerujem skôr k uľahčeniu svojej vlastnej práce, kedy napr. opakovane do svojho webu vkladáte nejaké formulárové dáta a chceli by ste si to nejako uľahčiť.

Written by rony