[Java] HTTP HEAD request

Pagina: 1
Acties:

  • Juup
  • Registratie: Februari 2000
  • Niet online
Peoples,

Om met java een URL op te halen is geen probleem, maar ik hoef alleen maar te weten of een pagina bestaat op de webserver. Dus wil ik een HEAD request doen. Maar mijn code daarvoor geeft altijd hetzelfde resultaat, of de pagina nu wel of niet bestaat.
code:
1
2
3
4
5
6
7
8
URL u = new URL("http://www.bedrijf.nl/");
URLConnection uc = u.openConnection();
uc.connect();
String key = null;
for (int n = 1; (key = uc.getHeaderFieldKey(n)) != null; n++)
{
  out.println(key + ": " + uc.getHeaderField(key) + "<br>");
}

Weet iemand hoe ik kan kijken of een URL wijst naar een bestaande pagina?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:20
Het beste kun je kijken naar de status code die je van de server terugkrijgt; bij 200 bestaat je pagina, bij 404 bestaat de pagina zeker niet en bij de overige status codes heb je nog legio andere gevallen (redirected, tijdelijk niet beschikbaar, forbidden, etc.).

Daarvoor kun je de getResponseCode van het HttpURLConnection object gebruiken (dat je van openConnection terugkrijgt, als het goed is). De diverse status codes zijn al als constanten gedefinieerd (HttpURLConnection.HTTP_OK, HttpURLConnection.HTTP_NOT_FOUND, etcetera).

  • Juup
  • Registratie: Februari 2000
  • Niet online
Dat is een geweldige tip! Ga het gelijk proberen. Dank je.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:20
Overigens kan het geen kwaad om na het creeëren van het object (door openConnection()) nog wel even setRequestMethod("HEAD") te doen omdat je anders waarschijnlijk alsnog de hele pagina ophaalt. (Eventueel ook setInstanceFollowRedirects(false).)

Beetje jammer dat uit de JavaDoc niet duidelijk blijkt wanneer nu precies de request gedaan wordt (en de gegevens dus verstuurd). Ik neem aan dat het niet met openConnection gebeurd aangezien je dan geen opties meer kan instellen. Waarschijnlijk gebeurd het 'wanneer het nodig is', dus in jou geval voor het eerst bij getResponseCode.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Zo?
code:
1
2
3
4
5
6
URL u = new URL("http://user:pass@host.com/");
URLConnection urlConn = u.openConnection();
HttpURLConnection hURL = (HttpURLConnection)urlConn;
hURL.setRequestMethod("HEAD");
out.println("responsecode: " + hURL.getResponseCode() + "<br>\n");
out.println("responsemessage: " + hURL.getResponseMessage());

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Juup
  • Registratie: Februari 2000
  • Niet online
Hij lijkt dat username:password@ dingetje niet te pakken. Ik krijg steeds een 401 error: Unauthorized.
Moet ik die apart setten ofzo?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Juup
  • Registratie: Februari 2000
  • Niet online
Ahhh gelukt, dat moet je encoden enzo:
code:
1
2
3
4
5
6
7
8
9
10
URL url = new URL ("http://bedrijf.nl/index.html");
String userPassword = "user:pass";
String encoding = new sun.misc.BASE64Encoder().encode (userPassword.getBytes());
URLConnection uc = url.openConnection();
uc.setRequestProperty ("Authorization", "Basic " + encoding);
 
HttpURLConnection hURL = (HttpURLConnection)uc;
hURL.setRequestMethod("HEAD");
out.println("responsecode: " + hURL.getResponseCode() + "<br>\n");
out.println("responsemessage: " + hURL.getResponseMessage());

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.

Pagina: 1