Es ist, weil openURI ein Tempfile
Objekt zurückgibt, die eine spezielle Implementierung der File
Klasse:
A Tempfile Objekte verhält sich wie ein File-Objekt, und Sie können alle üblichen Dateioperationen darauf ausführen : Lesen von Daten, Schreiben von Daten, Ändern der Berechtigungen usw. Obwohl diese Klasse nicht explizit alle von File unterstützten Instanzmethoden dokumentiert, können Sie tatsächlich jede Dateiinstanzmethode für ein Tempfile-Objekt aufrufen.
Und ein File
Klasse Eltern ist ein IO
Objekt. Das heißt, wenn Sie read
anrufen, rufen Sie eine IO
implementation of the method.
Was alles bedeutet, dass Sie eine Datei lesen, wenn Sie response.read
tun und Sie bis Ende der Datei lesen. Aus diesem Grund erhalten Sie beim zweiten Lesen eine leere Zeichenfolge, weil Sie versuchen, vom Ende der Datei zu lesen, die nichts enthält.
Hier ist ein Weg, dies zu prüfen und sehen, was los ist:
require 'open-uri'
response = open('http://google.com')
puts response.class # => Tempfile
puts response.read # => <!doctype html><html ...
puts response.pos # => 10941
puts response.read # => ""
response.rewind
puts response.pos # => 0
puts response.read # => <!doctype html><html ...