Šiais laikais visi naudojasi įvairiomis programomis – klientais (clients), padedančiomis lengviau, patogiau ir maloniau džiaugtis interneto teikimais malonumais. Visi naudojasi interneto naršykles, kaip antai: Internet Explorer, Netscape Navigator, Opera ir t.t., pašto programas, pavyzdžiui, Outlook Express, The Bat! ir t.t., bei kitas specializuotas programas (mIRC, GetRight ir t.t.), ir niekas nesigilina į jų veikimo principus. Šį kartą pabandysiu apie tai truputį papasakoti.
Kaip jau minėjau, nereikia gilintis į duomenų siuntimo ir gavimo specifiką, nes tai atlieka programos, kurios naudojasi tam tkromis taisyklėmis, tam tikrais protokolais, kurie yra vienodi, kad skirtingos programos galėtų pasiekti tą patį rezultatą.
Visą prisijungimą vykdysime per socket’us... Kas tie socket’ai? Na, kas kažkiek moka anglų kalbos, turbūt žino, kad socket – tai paprasčiausia rozetė, o rozetė – tai paprasčiausias elektrinės šakutės lizdas, kasdien naudojamas buityje, per kurį kažkoks įtaisas sujungiamas su elektriniu šaltiniu. Ir programavime, tai rozetė, per kurią užmezgiamas ryšys su serveriu (tarnybine stotimi) ir perduodami bei gaunami duomenys. Aišku, tai nėra pilnas paasiškinimas, nes, kaip ir kiekvienas progamavimo elementas, tai yra sudėtingas dalykas.
Šį kartą mes pabandysime prisijungti prie serverio ir gauti iš jo atsakymą. Naudosime fsockopen funkciją (plačiau apie tai galite pasiskaityti PHP dokumentacijoje prie tinklo funkcijų - Network Functions).

Prisijugimas prie http serviso, kuris būna įjungtas 80 port’ę (treatleidžia kalbininkai, tačiau šito daikto vertimo nebeprisimenu, rodos laikinoji sąsaja, bet tai ir neturi didelės reikšmės).
<?
/* Nurodomas hostas, prie kurio jungiamasi */
$hostas = "marius.crazy.lt";

/* Jungiamasi per 80 porta, nurodome timeout'a 60 s. */
$jungtis = fsockopen($hostas, 80, &$errno, &$errstr, 60);

/* Pranesame apie klaida, jei nepavyko prisijungti */
if(!$jungtis) {
echo "$errstr ($errno)<br>\n";
exit();
}

/* Sudarom uzklausa */

/* Ka norime gauti is serverio */
$uzklausa = "GET /index.php HTTP/1.0\r\n";
/* Referer - is kur atejome i si puslapi */
$uzklausa .= "Referer: www.delfi.lt";
$uzklausa .= "Proxy-Connection: Keep-Alive\r\n";
/* Nurodome narsykle */
$uzklausa .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)\r\n";
/* Na ir dar keletas uzklausos eiluciu, kurios padetu jei ant IP yra keli puslapiai */
$uzklausa .= "Host: $hostas\r\n";
$uzklausa .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png\r\n";
$uzklausa .= "Accept-Encoding: gzip\r\n";
$uzklausa .= "Accept-Language: de,en,x-ns1_sbnManqNhQ,x-ns2r3709OnmPe2\r\n";
$uzklausa .= "Accept-Charset: iso-8859-1,*,utf-8\r\n";

/* Pasiunciame suformuota uzklausa */
fputs($jungtis, "$uzklausa\r\n");

/* Gauname duomenis per is socket'o */
$atsakymas = "";
while(!feof($jungtis)) {
$atsakymas .= fgets($jungtis,12800);
}

/* Parodome atsakyma */
echo $atsakymas;
?>

Atsakymas bus gautas su visais serverio header’iais. Pvz.:


HTTP/1.1 200 OK
Date: Wed, 22 May 2002 10:20:33 GMT
Server: Apache/1.3.23 (Unix)
X-Powered-By: PHP/4.1.1
Connection: close
Content-Type: text/html


Šitą header’į galite panaudoti, pavyzdžiui, serverio tipui (Unix, Win32, Solaris ir t.t.) ar PHP versijai sužinoti. Šitą dalyką galite panaudoti, pavyzdžiui, kaip Netcraft (www.netcraft.com), stebinti serverio tarnybinių stočių padėtį.
Po header’io gaunamas HTML kodas, kurį jau naršyklės analizuoja ir pateikia vartotojui.

Žinoma galima socket’us panaudoti ir kitokiems prisijungimas, pavyzdžiui, prie USENET naujienų, FTP serverių ir t.t.

---
[^] Atgal
[«] Skaitykla

* * Gen. time: 0.0179
* © xneox.com