Zdravím všechny čtenáře mých stránek. Po dlouhé době se zde objeví nový článek a já doufám, že další články budou přidávány již přijatelně častěji. Chci se tedy omluvit za dlouhou odmlku, která byla způsobena přípravou na maturitu, maturitou samotnou a brigádou, která následovala po maturitě. Nyní by mělo být více času, tak se psaní článků snad vrátí do normálu. Teď už dosti řečí okolo a jdeme se věnovat tématu. V tomto krátkém článku si ukážeme, jak je v Javě snadné číst informace z HTTP hlaviček serveru.
Metodu, kterou si pro tento účel napíšeme snad není třeba nějak podrobně popisovat. Jen vytvoříme objekt typu URL, kterému předáme adresu serveru pomocí vstupního parametru metody. Dále na tomto objektu musíme otevřít spojení. K tomu vytvoříme instanci třídy URLConnection. Dále následu jen cyklus, v kterém se budou do instance třídy StringBuffer ukládat názvy polí a hodnoty. Metoda bude vracet jen text - String, který obsahuje celý výpis. Metodu si samozřejmě každý může upravit podle své potřeby.
public static String getServerHeaderInfo(String serverURL) {
StringBuffer buffer = new StringBuffer();
try {
URL address = new URL(serverURL);
URLConnection connection = address.openConnection();
int i = 0;
while(true) {
String fieldName = connection.getHeaderFieldKey(i);
String fieldValue = connection.getHeaderField(i);
if(fieldName == null && fieldValue == null) break;
if(fieldName == null)
buffer.append(fieldValue + "\n");
else
buffer.append(fieldName + ": " + fieldValue + "\n");
i++;
}
} catch(MalformedURLException Mex) {
System.err.println(Mex);
} catch (IOException IOex) {
System.err.println(IOex);
}
String content = buffer.toString();
return content;
}
Jen bych k metodě ještě dodal, že při volání metody getHeaderFieldKey je u verze HTTP hodnota klíče null, proto následuje i ta podmínka vně cyklu.
Pokud bychom zavolali tuto metodu například na mé stránky, tak po vypsání vráceného Stringu uvidíme tento text.
HTTP/1.1 200 OK
Date: Thu, 06 Aug 2009 18:14:45 GMT
Server: Apache/2.2.3 (Debian) mod-xslt/1.3.9 Phusion_Passenger/2.0.5 PHP/5.2.0-8+etch13 mod_ruby/1.2.6 Ruby/1.8.5(2006-08-25) mod_ssl/2.2.3 OpenSSL/0.9.8c
X-Powered-By: PHP/5.2.0-8+etch13
Keep-Alive: timeout=5, max=80
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html