Delphi - Milyen típusú Web-szerverről üzemel egy adott URL?

forráskód letöltése
Ebben a cikkben egy egyszerű kis trükköt felhasználva bármilyen URL-ről le tudjuk kérdezni, hogy az milyen típusú Web-szerverről (pl. Apache) üzemel, sőt, hogy az adott szerveren milyen típusú operációs rendszer (Linux vagy Windows) van telepítve. Ezen kívül azt is megállapíthatjuk, hogy az adott Internet-cím egyáltalán létezik-e.
Ehhez mindössze arra van szükségünk, hogy a lekérdezni kívánt webhely távoli kiszolgálójának 80-as port-jára egy GET parancsot küldünk, a következő formában:
GET / HTTP/1.0{CR/LF}{CR/LF}{CR/LF}
Ekkor válaszként ugyanilyen formában megkapjuk a kívánt adatokat, valamint annak a webhelynek a tartalmát is szöveges formátumban, melyet vizsgálunk.
Lássuk, hogyan valósítjuk meg mindezt a gyakorlatban.
A megoldáshoz felhasználunk az Internet komponenspalettáról egy ClientSocket egyedet. Ennek az OnConnect eseményéhez az alábbi kódot írjuk:
  ClientSocket1.Socket.SendText('GET / HTTP/1.0'+#13+#10+#13+#10+#13+#10);
Amennyiben a ClientSocket csatlakozott a távoli kiszolgálóhoz, a fenti kéréssel fordul hozzá. A választ az OnRead esemény bekövetkeztekor kiíratjuk a Memo-ba.
  Memo1.Lines.Add(ClientSocket1.Socket.ReceiveText);
A csatlakozás akkor történik meg, ha megnyomjuk a Validate gombot:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  ClientSocket1.Close;
  ClientSocket1.Host:=Edit1.Text;
  ClientSocket1.Port:=80;
  ClientSocket1.Open;
end;
A Memo-ban nem jelenítjük meg a teljes választ, csak annak az első 25 sorát. A számunkra fontos információk egyébként az első 10 sorban benne vannak.
  Memo1.Lines.Delete(25);
A válasz fejléce általában a következőképpen épül fel:
  • HTTP/1.1: A HTTP protokoll típusa.
  • Server: a Web-szerver nevét, verziószámát, esetenként a telepített operációs rendszer és egyéb programok típusát kapjuk vissza.
  • Content-Location: annak az URL-nek az elérési útvonala, amelyet vizsgálunk.
  • Date: az adott Web-szerver rendszerdátuma és rendszerideje.
  • Content-Type: az adott webhely tartalmának típusa, pl. szöveges, HTML, valamint a használt kódkészlet fajtája, pl. ISO.
  • Accept-Ranges: a kommunikáció milyen típusú adatokkal történik, pl. byte-okkal.
  • Last-Modified: az adott weboldal utolsó módosításának időpontja.
  • ETag: azonosítószám, a kommunikáció során képzett csomagoknál van szerepe.
  • Content-Length: az elérési útvonalon található weblap tartalmának hossza.
Meg kell jegyezni, hogy az egyes Web-szerverek által nyújtott válaszok a fentiektől eltérhetnek.
Amennyiben a vizsgált URL nem létezik, akkor arról egy hibaüzenet értesít bennünket.