2012-10-30 9 views
17

Istnieje biblioteka w Pythonie, którą uwielbiam nazywa się "Żądaniami". Żądania to klient HTTP zbudowany na urllib3. "requests doc".Równoważnik rubinowy biblioteki zapytań Pythona (klient HTTP)

Szukam czegoś podobnego w Ruby. Zasadniczo potrzebuję:

  • Prześlij wsparcie dla plików (wieloczęściowe/dane formularzy).
  • Łatwe pobieranie/wysyłanie.
  • Pliki cookie można przekazywać z obiektu odpowiedzi do obiektu żądania (skompiluj ręcznie skrypt logowania).
  • Stabilny i elastyczny.
  • Obsługa sesji (aby nie musieć ręcznie obsługiwać plików cookie, jeśli nie mamy).

Oglądałem Typhoeus, ale przykład kodu na stronie głównej nie działa; przenieśli kod wzdłuż i metoda get nie jest już dostępna bezpośrednio, więc nie zaczyna się dobrze. Krawężnik wydaje się fajny i lubię cURL, jest też klient-klient, który wydaje się popularny, a em-http wydaje się dość szybki według benchmarku. Jest też Patron i krawężnik, którego nie mam czasu spróbować. I, oczywiście, Net: HTTP. Ale wydaje się, że nie ma głównego rozwiązania, na które wszyscy zwracają uwagę.

Myślę, że wielu ludzi było w mojej sytuacji i zastanawiam się, co wybrali i dlaczego?

Odpowiedz

4

ja ostatecznie uznał ten httpclient: https://github.com/nahi/httpclient

zacząłem go używać, to pasuje do funkcji, które chciałem, i więcej ponad to dość szybko, według pewnego wzorca. Obsługuje również niektóre zaawansowane rzeczy, takie jak przesyłanie strumieniowe lub fragmentacja odpowiedzi. To wstyd, choć nie słynie w społeczności rubinów. :)

2

Jeśli potrzebujesz plików cookie i obsługi formularzy, jedyną dostępną metodą jest mechanize.

+0

Myślę, że mechanize symuluje całą przeglądarkę, nie? – Hartator

+0

Potrzebuję czegoś więcej barebone do żądania http bezpośrednio ... – Hartator

+0

Używam httpclient dużo. To świetna biblioteka, gdy chcesz czegoś lekkiego. Ale nie robi wszystkiego na twojej liście i nie działa mechanizacja. – pguardiario

6

Wbudowany OpenURI jest pierwszym miejscem do patrzenia. To proste i ładnie obsługuje podstawy.

Typhoeus, który użyłem kilka razy w procesach równoległych, działa ładnie. Documentation i the codebase są dostępne na Github.

irb(main):009:0> response = Typhoeus::Request.get("www.example.com") 
=> #<Typhoeus::Response:0x007ffbcc067cf8 @code=302, @curl_return_code=0, @curl_error_message="No error", @status_message=nil, @http_version=nil, @headers="HTTP/1.0 302 Found\r\nLocation: http://www.iana.org/domains/example/\r\nServer: BigIP\r\nConnection: close\r\nContent-Length: 0\r\n\r\n", @body="", @time=0.035584, @requested_url=nil, @requested_http_method=nil, @start_time=nil, @start_transfer_time=0.035529, @app_connect_time=2.8e-05, @pretransfer_time=0.000429, @connect_time=2.8e-05, @name_lookup_time=2.8e-05, @request=:method => :get, 
    :url => www.example.com, @effective_url="HTTP://www.example.com", @primary_ip="192.0.43.10", @redirect_count=0, @mock=false> 
irb(main):010:0> puts response.headers 
HTTP/1.0 302 Found 
Location: http://www.iana.org/domains/example/ 
Server: BigIP 
Connection: close 
Content-Length: 0 

użyć Net :: HTTP czasami też, ale OpenURI i Typhoeus z Hydra, okazały się być łatwe w użyciu i zintegrować z mojego kodu.

2

Przykro mi słyszeć, że Typhoeus się nie sprawdziło. Powodem jest to, że pokazuje pracę README howto z Typhoeus v0.5.0.rc który może być zainstalowany z

gem install typhoeus --pre 

lub

gem "typhoeus", git: "git://github.com/typhoeus/typhoeus.git" 

. Nie ma obsługi sesji dla Typhoeus, ale poza tym może to być dobre dopasowanie. Przynajmniej jest stabilny jak diabli, ponieważ jest zbudowany na bazie libcurl.

pliku wysyłania przykład:

Typhoeus.post("www.example.com/file", body: { file: File.open("testfile.txt","r") }) 

Nie ma niestety skrót do czynienia z cookies, musisz ustawić je ręcznie:

Typhoeus.get("www.example.com/needs_cookie", headers: { Cookie: "PRIVATE" }) 

TLDR: Wybrałbym Typhoeus do jego prędkości i libcurl, jeśli chcesz samemu skonfigurować ustawienia. W przeciwnym razie zajrzę do Faraday i użyję go z adapterem Typhoeus.

Edytuj: Dodałem instrukcje instalacji do README.

Edytuj: 0,5 zostaje zwolniony.

10

Oto macierz cech zawierająca wybór klientów HTTP dla Ruby.

https://bit.ly/RubyHTTPClients

Autor porównania jest autorem httpclient, ale z niecierpliwością na to porównanie jest fair.

Aby uzyskać bardziej narracyjny styl z objaśnieniem macierzy, zobacz http://www.slideshare.net/HiroshiNakamura/rubyhttp-clients-comparison tego samego autora.

Porównanie wychodzi częściowo na korzyść httpclienta, który również mogę polecić. Prosty, funkcjonalny, kompatybilny ze wszystkimi platformami i wydajnymi platformami. Lepsza obsługa plików cookie niż cokolwiek innego, ale w prezentacji wspomniano, że pliki cookie mogą wyciekać z jednej (wrogiej) witryny do innej, jeśli używa się tego samego obiektu klienta. Nie wiem, czy to nadal prawda.

+0

Tak, nadal jest tak w przypadku plików cookie. Na szczęście jest to wielka luka w zabezpieczeniach, po prostu można ustawić ciasteczka dla domeny .com. – Hartator

+0

Dopóki jesteś tego świadomy, prawdopodobnie nie jest to duży problem. * Myślę * (nie ufaj mi!), Że tak długo, jak tworzysz dwa różne obiekty dla dwóch stron, powinieneś być w porządku. – clacke

+1

Niestety, httpclient nie jest aktywnie utrzymywany. Znalazłem [Excon] (https://github.com/geemus/excon) jest dobre – w00d

Powiązane problemy