Rewired 2.0 – RwHttp
Funkcioja hogy affele szerver-oldali, konnyen kezelheto bongeszo legyen. Azaz kulonbozo modon lekerhessen adatokat kulso weboldalokrol, majd azokat tetszolegesen analizalni tudjuk es attol fuggoen utasitasokat vegrehajtani. Regex utasitasokat is megadhatunk (reszletekrol majd leljebb), es azoknak fejeben ha megtalalta azokat, nem tolti tovabb a potencialis nagy fajlokat, csak a kello anyagot tolti le. Aszinkron (non blocking) modban is tud kuldeni adatokat; connection timeout-ot es csomo egyeb hibat is kezel, jelent, mintsem hogy betorne a progi ha ezek fellepnek. Azonfelul tovabbi kisebb HTTP ugyekkel kapcsolatos segedfunkciokat is tartalmaz.
Eredetileg az RWMedia backend resze volt, de innentol kezdve kulon modulkent tartom fenn, mivel onmagaban is egy bazi hasznos szerszam minden egyeb fejlesztes/teszteles szempontjabol. Drupalon kivuli szitukban is, ugy altalanosan a PHP-ben.
Letoltes:
https://www.rewired.hu/sites/default/files/development/rwhttp.zip
Telepiteshez lepesek:
1) Valamilyen PHP kodot es MySQL-t mukodteto rendszer, pl en XAMPP-ot hasznalok.
2) Sima Drupal 7.x telepites
3) Be kell masolni a kicsomagolt “rwhttp” direktorium tartalmat a “{DrupalTelepites}/sites/all/modules” direktorium ala.
4) Drupalban bekapcsolni a “RwHttp“ modult. (menusor: modules->rwhttp bekapcs)
5) Drupalban resetalni a cache-t, hogy aktivizalja magat a friss kod (menusor: configuration->performance->clear all cache gomb)
6) Keszen vagy.
Telepiteshez lepesek, ha nem akarod Drupallal hasznalni, csak sima PHP projektekben:
1) A 'http.inc' fajlt nevezd at 'http.php' fajlra, es masold be a projektedbe majd hivd ahol akarod a kodban. A tobbi fajlt ignoralhatod mert azok csak a Drupalnak kellenek.
2) Keszen vagy.
Hasznalati elve:
Egyszeruen csak hivni kell a Class-t es a request funkcionak array-ben adagolni a parancsokat, pl:
$valasz = \RwHttp::request([
'parancs' => 'parancsOpcio',
'parancs2' => 'parancsOpcio2',
...
]);
vagy ha aszinkronba akarunk csak kuldeni, es nem erdekel a visszajelzett valasz (ami utobbi potencialisan egy lassu, vagy nem jelzo szerverrol 1-2 percre is felfoghatja a futo kodot) :
$valasz = \RwHttp::requestAsync([
'parancs' => 'parancsOpcio',
...
]);
A request() funkcioban visszakuldott valtozoban array-ben megkapjuk:
- a 'headers'-eket, amelyek szinten array-ben vannak rendezve. Igy pl barmilyen kod lefuttatas elott tesztelhetjuk hogy okes e a valasz, pl:
if ($valasz['headers']['status-code'] === '200') {...}
- az altalunk kuldott HTTP 'request'-et, amivel igy lathatjuk pontosan hogy mit is latott rolunk a megcelzott szerver, igy ha valami nem koserul ment el, itt csekkelhetjuk:
$valasz['request']
- es termeszetesen a megcelzott szerver altal visszavalaszolt adatokat, legyen az textualis szoveg, vagy barmifele mas binaris adat:
$valasz['data']
A 'request()' funkcioban megadhato parancsok, es parancs-opciok:
'url' => '{vamilyenSzoveg}'
- A megcelzott weboldal.
'referer' => '{vamilyenSzoveg}'
- Ezzel szimulalhato hogy a keres melyik tetszoleges weboldalrol jott.
'requestType' => 'GET' (default) vagy 'POST' vagy 'HEAD'
- HTTP request tipus.
'data' => '{valamilyenAdat'}
- ha POST request-et kuldunk, itt adhato meg a kuldott adat.
'followLocation' => 'TRUE' (default) vagy 'FALSE'
- ha tobb relocation van mielott elernenk a vegso szervert es nem szeretnenk hogy azokon vegigmenjen az RWHTTP hanem visszajelezzen az elsonel, akkor ezt ki kell kapcsolni.
'escape' => 'TRUE' vagy 'FALSE' (default)
- ha kepernyore akarjuk kiiratni a visszakapott 'data' uzenetet, akkor potencialisan nem szeretnenk hogy leffussanak a kapott HTTP tagok hanem azt ha forras formaban maradnak. Ezt bekapcsolva nem futnak le.
'charLimit' => 0 (default) vagy tetszoleges INT szam. 0=nincs limit.
- Limitalja a letoltott adatok mennyiseget byte-ban. Azaz pl ha potencialisan nagy fajlt celzunk meg, de csak az adat elso reszeit szeretnenk analizalni, akkor ezzel elerhetjuk konnyen hogy ne toltse le a tobbit, csak a szigoruan megengedett mennyiseget.
'pattern' => '{tetszolegesRegex'}
- Tetszoleges regex, amit keresni fog a RWHttp a lekert webcimrol visszajelzett adatban.
Ha ezt hasznaljuk, akkor a RWHttp visszajelzes array kibovul tovabbi ket valtozoval:
'patternMatchCount' es 'patternMatchArr'
Az elso jelzi hogy hanyszor talalta meg az altalunk megadott regex parancsot, a masodik meg gyujti egy array-ben sorra azokat, a szamukra tetszolegesen felhasznalni a kesobbiekben.
'patternMatchCountLimit' => 0 (default) vagy tetszoleges INT szam. 0=nincs limit.
- Meghatarozott max talalat limit. Ha ezt megadjuk, akkor a limit elerese utan nem tolti tovabb az adatokat a szerverrol, hanem visszajelez. Celszeru akkor hasznalni, ha tudjuk pontosan mennyit keresunk az adott regex-bol, igy ha megtalaltuk amit kerestunk, nem kell tovabb toltelunk egy potencialisan joval nagyobb fajlt.
'customHeaders' => '[
'customHeader1', 'customHeader2', ...
];
- array-ben, vesszovel elvalasztva egymastol meg tudunk adni barmifele custom HTTP header adatot is, ha epp kellene a request-hez. Pl HTTP-ben elkuldott authentication certification vagy hasonlo szituknal siman jo ha konnyen hozza tudjuk csatolni a kello informaciokat. Vagy ha custom sutiket, vagy ilyesmiket akarunk csatolni.