2013-05-26 11 views
18

Wygląda na to, że oba te klejnoty wykonują bardzo podobne zadania. Czy ktoś może podać przykłady, gdzie jeden klejnot byłby bardziej użyteczny od drugiego? Nie mam konkretnego kodu, do którego się odnawiam, bardziej zastanawiam się nad ogólnymi przypadkami użycia dla każdego klejnotu. Wiem, że to krótkie pytanie, wypełnię puste pola na życzenie. Dzięki.Jaka jest różnica między klejnotami Ruby "open-uri" i "Net: HTTP"?

+0

Jeśli 'open-uri' pasuje do swojej nazwy, prawdopodobnie oznacza, że ​​może obsługiwać inne schematy niż' http'. – fge

Odpowiedz

20

Powodem, dla którego wyglądają, że wykonują podobne zadania, jest OpenURI to opakowanie dla Net :: HTTP, Net :: HTTPS i Net :: FTP.

Zwykle, chyba że uważasz, że potrzebujesz interfejsu niższego poziomu, korzystanie z OpenURI jest lepsze, ponieważ możesz uzyskać mniej kodu. Za pomocą OpenURI można otworzyć URL/URI i potraktować go jako plik.

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

+1

Dzięki Alex. Przepraszam, co to jest "opakowanie"? –

+9

Owijarka jest po prostu biblioteką, która używa jednej lub więcej innych bibliotek do stworzenia ładniejszego interfejsu wyższego poziomu. W tym konkretnym przypadku OpenURI używa bibliotek Net, aby odsłonić bardziej znany interfejs, tj. Odczyt z pliku. –

3

Właśnie się dowiedziałem, że open robi śledzić przekierowania, a Net::HTTP nie, która jest istotna różnica.

Na przykład open('http://www.stackoverflow.com') { |content| puts content.read } wyświetli prawidłowy kod HTML po wykonaniu przekierowania, a Net::HTTP.get(URI('http://www.stackoverflow.com')) wyświetli komunikat przekierowania i kod statusu 302.

Powiązane problemy