2013-05-26 6 views
18

Es scheint, als ob diese beiden Edelsteine ​​sehr ähnliche Aufgaben ausführen. Kann jemand Beispiele geben, wo ein Edelstein nützlicher wäre als der andere? Ich habe keinen spezifischen Code, auf den ich mich beziehe, ich frage mich eher über allgemeine Anwendungsfälle für jedes Juwel. Ich weiß, das ist eine kurze Frage, ich werde die Lücken auf Anfrage ausfüllen. Vielen Dank.Was ist der Unterschied zwischen den Open-Uri- und Net: HTTP-Edelsteinen von Ruby?

+0

Wenn 'open-uri' zu seinem Namen passt, bedeutet es wahrscheinlich, dass es andere Schemata als' http' verarbeiten kann. – fge

Antwort

20

Der Grund, warum sie aussehen, als ob sie ähnliche Aufgaben ausführen, ist OpenURI ist ein Wrapper für Net :: HTTP, Net :: HTTPS und Net :: FTP.

Normalerweise, wenn Sie das Gefühl haben, dass Sie eine niedrigere Schnittstelle benötigen, ist die Verwendung von OpenURI besser, da Sie mit weniger Code auskommen. Mit OpenURI können Sie eine URL/URI öffnen und als Datei behandeln.

See: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/open-uri/rdoc/OpenURI.html und http://ruby-doc.org/stdlib-1.9.3//libdoc/net/http/rdoc/Net.html

+1

Danke Alex. Entschuldigung, was ist ein "Wrapper"? –

+9

Ein Wrapper ist einfach eine Bibliothek, die eine oder mehrere andere Bibliotheken verwendet, um ein netteres Interface auf höherer Ebene zu erstellen. In diesem speziellen Fall verwendet OpenURI die Netzbibliotheken, um eine vertrautere Schnittstelle verfügbar zu machen, d. H. Das Lesen von einer Datei. –

3

Ich habe gerade herausgefunden, dass open Umleitungen folgt, während Net::HTTP nicht tut, was ein wichtiger Unterschied.

Zum Beispiel zeigt open('http://www.stackoverflow.com') { |content| puts content.read } den korrekten HTML-Code nach der Umleitung an, während Net::HTTP.get(URI('http://www.stackoverflow.com')) die Umleitungsnachricht und den 302-Statuscode anzeigt.

Verwandte Themen