2009-07-22 20 views
2

Ich versuche ein Skript zu schreiben, um zu prüfen, ob eine gegebene URL existiert und sich selbst zurückgibt, falls sie existiert. Die Dateitypen sind .jpg und .mov.Ruby: Überprüfen, ob die Datei auf einem Remote-Server existiert

Ich benutze derzeit die Open-Uri-Standard-Bibliothek, aber ich bin mir ziemlich sicher, dass ich etwas anderes verwenden sollte.

begin 
    if (open(image_url).read) 
     puts image_url 
    end 
    if (open(video_url).read) 
     puts video_url 
    end 
    rescue 
end 

Wie Sie sehen können, ist dies ziemlich ineffizient, weil es die gesamte Datei liest. Irgendwelche anderen Lösungen?

Antwort

5

Sie könnten eine HTTP-Bibliothek wie die Standardbibliothek 'net/http' oder etwas anderes wie die cURB-Bindungen verwenden, aber im Grunde möchten Sie nur eine HTTP HEAD-Anfrage ausgeben, die Ihnen nur die Kopfinformationen und nicht die eigentliche Antwort liefert Karosserie. Wenn die HEAD-Anfrage erfolgreich ist, bekommst du ein HTTP 200, wenn es nicht existiert, bekommst du ein HTTP 404 (du könntest andere Antworten bekommen, wie einen internen Fehler (HTTP 500) und was du damit machen willst, naja, es liegt an dir).

Lange Rede kurzer Sinn, verwenden Sie HTTP HEAD.

+1

Sie finden zwar ein paar Server, die nicht gut auf HTTP HEAD reagieren, es ist also nicht 100%. –

+0

Danke! @matthew Wahr, es ist nicht 100%, aber der Server, den ich versuche, Abfrage gut funktionieren. – puttputt

Verwandte Themen