Přidat článek mezi oblíbenéZasílat nové komentáře e-mailem Automatizácia vo svete počítačov V. - HTTP POST Request

V rámci seriálu sme si zatiaľ predstavili dva nástroje, ktoré nám vedia pomôcť zjednodušiť každodenné úkony a uviedli sme to na niekoľkých príkladoch. Oba predstavené nástroje boli pre MAC. Teraz je čas trochu prejsť aj na inú platformu, aj keď MACu dosť blízku a teda UNIX vo všeobecnosti.

1. Úvod

Silnou stránkou všetkých UNIX-like systémov (Linux, Solaris, BSD, MAC, ...) je skriptovanie v shell-i. Jedným z najpoužívanejších shell interpreterov je BASH (Bourne again shell).

Nasledujúci príklad by vám mal priblížiť, ako pomocou shellu vykonať HTTP POST request na určenú webovú stránku.

Mnoho z vás pozná stránky resp. služby typu pastebin. Kto nepozná, v krátkosti popíšem. Ide o službu, ktorá umožní na web poslať časť vášho zdrojového kódu, pričom ho naformátuje podľa syntaxe príslušného programovacieho jazyka. Odkaz na tento zdrojový kód následne posielate iným ľudom, ktorí ho potrebujú.

Pokiaľ niečo podobné využívate častejšie, môže sa hodiť menšia pomoc.

2. Úloha

Úlohou v tomto prípade je vytvoriť skript (v BASH), ktorý na jedno spustenie zoberie príslušný zdrojový kód, odošle ho na server a vám naspäť vráti URL adresu, resp. odkaz na tento váš zdrojový kód.

3. Artefakty

Predtým, než začneme čokoľvek programovať, je potrebné si uvedomiť, čo budeme potrebovať.

Úplne prvým artefaktom je stránka, na ktorej budeme POST vykonávať. Ja použijem teda službu pastebin na adrese http://paste.jabbim.cz/.

Keďže nemáme predstavu o tom, aký POST daná stránka robí, musíme si to v prvom rade zistiť.
Na tento účel využijeme rozšírenie do firefoxu HTTPFox.

Ďalšim nástrojom je cURL. Ide o terminálový nástroj na posielanie alebo získavanie dát pomocou URL. V systéme býva väčšinou nainštalovaný.

Pre náš príklad je potrebné mať taktiež nástroj na prácu s clipboardom, napríklad xclip. Pokiaľ nie je nainštalovaný, nájdete ho v repozitároch. Pre systém MAC OS X sa bude využívať nástroj pbpaste/pbcopy, ktoré už v systéme obsiahnuté sú.

4. Realizácia

4.1. Príprava

Ako prvé si zistíme nástrojom HTTPFox, aký POST odosiela naša stránka pri stlačení tlačidla "Send".
Po nainštalovaní HTTPFox ho spustíme klávesovou skratkou CTRL+SHIFT+F2. Nástroj sa otvorí v spodnej časti okna.

http://pc.poradna.net/file/view/8055-obr1-png

Vyplníme formulár na webovej stránke, pustíme HTTPFox pomocou tlačidla "Start" a následne odošleme formulár tlačidlom "Send". Po odoslaní stlačíme tlačidlo "Stop" a pozrieme si výsledok. V hlavnej časti sa nachádza zoznam requestov a medzi nimi nájdeme jeden s metódou POST. V spodnej časti sa prepneme do POST Data.

http://pc.poradna.net/file/view/8056-obr2-png

Jednotlivé názvy parametrov sú dôležité a niekde si ich zapíšeme. Obzvlásť dôležitý je parameter "paste", ktorý predstavuje tlačidlo "Send".

Poznámka: názov parametra, pod ktorým sa tlačidlo nachádza, nemusí byť na iných stránkach nazvaný "paste".

Keďže sa na stránke nachádza výberový zoznam, je vhodné si pozrieť, aké hodnoty môže nadobúdať. V prehliadači využijeme možnosť zobrazenia zdrojového kódu stránky. Na obrázku vidno jednotlivé hodnoty, ktoré sú dostupné.

http://pc.poradna.net/file/view/8057-obr3-png

Máme teda informácie o tom, čo budeme posielať a kam. Keďže chceme po odoslaní aj nejaký ten výstup, musíme si ho zistiť. Dokáže to aj samotné HTTPFox v časti Headers, ale môžeme si to overiť aj krátkym skriptom.

Na tento účel využijeme základný zápis príkazu curl:

curl -d "title=autoscript&format=applescript&code2=nejaky text&poster=moje_meno&expiry=d&paste=Send" http://paste.jabbim.cz/ -D /cesta/na/vystup.txt

Tento príkaz už vykonáva samotný POST na stránku a do výstupného súboru nám vráti odpoveď.

Tá by mala byť v takomto tvare:

HTTP/1.1 302 Found
X-Powered-By: PHP/5.2.6-1+lenny9
Location: http://paste.jabbim.cz/5459
Content-type: text/html
Content-Length: 0
Date: Sat, 07 Jan 2012 23:32:22 GMT
Server: lighttpd/1.4.19

Ak si správne všimnete časť location, ide o URL, ktorú potrebujeme získať.

4.2. Tvorba a popis skriptu

Trochu si úlohu zjednodušíme a ako úložisko pre text požiadavky a odpoveď využijeme clipboard. Resp. z clipboardu bude skript načítavať zdrojový kód, ktorý chceme zaslať a naspäť do clipboardu nám zapíše odpoveď, teda URL adresu.

Samotný skript nie je rozsiahly a vypíšeme si hneď 2 verzie. Pre MAC a pre Linux.

MAC

#!/bin/bash

cb=`pbpaste`

headers=`curl --data-urlencode "title=$1" --data-urlencode "format=$2" --data-urlencode "code2=$cb" -d poster=moje_meno -d expiry=d -d paste=Send [url]http://paste.jabbim.cz/[/url] -s -o /dev/null -D -`

echo "$headers" |  egrep -o "http:.*" | pbcopy

Linux

#!/bin/bash
cb=`xclip -out -selection clipboard`

headers=`curl --data-urlencode "title=$1" --data-urlencode "format=$2" --data-urlencode "code2=$cb" -d poster=moje_meno -d expiry=d -d paste=Send [url]http://paste.jabbim.cz/[/url] -s -o /dev/null -D -`

cb=`echo "$headers" |  egrep -o "http:.*"`

echo $cb | tr -d '\n' | xclip -in -selection clipboard

Verzie sa líšia len prácou s clipboardom, pričom sa menia len využívaným nástrojom.

V prvom kroku si do premennej "cb" naplníme obsah clipboardu (malo by ísť o nejaký zdrojový kód, ktorý chcete na stránku poslať).

Ďalší príkaz curl vytvorí POST (zašle dáta) na stránku a výsledok vráti do premennej "header".

Prepínač --data-urlencode určuje, že dáta chceme poslať enkódované, v opačnom prípade by mohol nastať problém, ak by váš text obsahoval niektoré zo špeciálnych znakov. Za týmto prepínačom nasledujú parametre, ktoré sme získali pomocou HTTPFox aj s hodnotami. V prípade, že nepotrebujeme využiť enkódovanie, stačí nam využiť prepínač -d. Za parametrami nasleduje URL adresa, kde sa má POST vykonať a ďalšie prepínače.

Prepínač -s predstavuje silent mode (tichý mód), aby skript nevypisoval výsledok na obrazovku resp. do terminálu.

Prepínač -D slúži na zápis výstupu HEADERS. Pomlčka za ním znamená, že výstup nebude realizovaný do súboru. Namiesto toho je celý príkaz v spätných apostrofoch a výstup sa vloží do premennej "header".

Pomocou regulárných výrazov a príkazu "egrep" z výstupu header odfiltrujeme už len samotnú URL a vložíme ju do clipboardu.

4.3. Uloženie a spustenie

Skript uložte ako súbor bez prípony a nastavte mu práva na spustenie príkazom chmod.
chmod u+x subor_skriptu

Ako si môžete všimnúť, skript obsahuje premenné $1 a $2. Tieto slúžia ako vstupné argumenty skriptu. Pri volaní je teda potrebné vypísať ich.

Volanie skriptu sa realizuje príkazom:
./subor_skriptu arg1 arg2

5. Varianty

Jedným z variantov môže byť, že vstupom bude obsah súboru/ov, ktoré sa budú v cykle prechádzať a výstup bude odosielaný do iného súboru.

Vhodné využitie je aj pri testovaní formulárov na vašich stránkach, kde sa jednotlivé dáta dajú pred odosielaním generovať prípade si ich pripraviť do súboru.

6. Záver

Na záver asi len upozornenie, ak budete podobný skript realizovať a testovať na stránke, ktorá nie je vaša, aby ste ju zbytočne nezaspamovali (ako sa to mierne podarilo mne :D).

Taktiež na záver ďakujem losovi za pomoc a vytvorenie a overenie "linux verzie" skriptu.

Komentář k článku

1 Zadajte svou přezdívku:
2 Napište svůj komentář:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět na články