Script-Tip: URL auf Existenz prüfen

In unserem heutigen Script-Tip wollen wir euch zeigen wie die Existenz einer URL geprüft werden kann. Dazu wird der Response-Code der angefragten Seite validiert und ein entsprechender boolischer Wert zurückgegeben.

Eine Beispielimplementierung könnte folgendermaßen aussehen:

require 'open-uri'
require 'net/http'

def existiert_url?(url)
  url = URI.parse(url)
	begin
		Net::HTTP.start(url.host, url.port) do |http|
		# An dieser Stelle kann bei Bedarf auch auf
		# andere Response-Codes geprüft werden
		  return http.head(url.request_uri).code == "200"
		end
	rescue SocketError => se
		# Fehlerbehandlung, wenn die Domain nicht existiert
		# Je nach Applikation kann hier die entsprechende Aktion durchgeführt werden
	rescue
		# Alle anderen Fehlerfälle werden/können hier behandelt werden
	end
end
 

Danach kann die Existenz einer URL geprüft werden:

 existiert_url? "http://www.rubyonrails.de/"
 # => true: Die Startseite existiert
 existiert_url? "http://www.rubyonrails.de/tag/rails-3/"
 # => true: Es gibt eine Unterseite mit Artikeln/Tags zu Rails 3
 existiert_url? "http://www.rubyonrails.de/GIBT-ES-NICHT"
 # => false: Diese Unterseite existiert nicht

Eingestellt am 11.03.2010 um 10:46

Kategorie: Tutorials

Be Sociable, Share!

3 Kommentare zu “Script-Tip: URL auf Existenz prüfen”

eller82   schrieb:

Hallo,

schönes Script, jedoch laufe ich immer auf folgenden Fehler, wenn ich eine URL eingebe die nicht existiert. Gibt es eine saubere Möglichkeit das abzufangen?

getaddrinfo: nodename nor servname provided, or not known

Danke.

derkaan   schrieb:

Hallo eller82,

das Script hatte nur URLs von bekannten Domains geprüft, aber dies muss nicht immer gegeben sein. Daher habe ich es angepasst. In der neuen Version werden nun ggf. Fehler abgefangen und können nach Bedarf behandelt werden.

Viele Grüße
derKaan

eller82   schrieb:

Vielen Dank. Damit klappt es wunderbar.

Suchen auf rubyonrails.de

Aktuelle Rails Version + Abhängigkeiten:

Gem rails-3.0.0
actionmailer (= 3.0.0, runtime)
actionpack (= 3.0.0, runtime)
activerecord (= 3.0.0, runtime)
activeresource (= 3.0.0, runtime)
activesupport (= 3.0.0, runtime)
bundler (~> 1.0.0, runtime)
railties (= 3.0.0, runtime)

Rails auf Rubyforge
Rails auf Github