2012-10-30 37 views
17

Có một thư viện bằng Python mà tôi yêu thích được gọi là "Yêu cầu". Yêu cầu là một HTTP client build trên urllib3. "requests doc".Ruby Tương đương với Thư viện Yêu cầu Python (HTTP Client)

Tôi đang tìm một thứ tương tự trong Ruby. Về cơ bản những gì tôi cần là:

  • Tải lên hỗ trợ tệp (nhiều phần/biểu mẫu-dữ liệu).
  • Dễ dàng nhận/đăng.
  • Cookie có thể được chuyển từ đối tượng phản hồi sang đối tượng yêu cầu (tạo tập lệnh đăng nhập theo cách thủ công).
  • Ổn định và linh hoạt.
  • Hỗ trợ phiên (không phải xử lý cookie theo cách thủ công nếu chúng tôi không có).

Tôi đã xem Typhoeus, nhưng ví dụ mã trong trang chủ không hoạt động; họ đã di chuyển mã và phương thức get không còn có thể truy cập trực tiếp như vậy, vì vậy nó không khởi động tốt. Curb có vẻ tốt đẹp và tôi thích cURL, đó cũng là phần còn lại-khách hàng, mà có vẻ phổ biến, và em-http có vẻ khá nhanh theo điểm chuẩn. Có một người bảo trợ và curb-fu, mà tôi không có thời gian để thử. Và, tất nhiên, Net: HTTP. Nhưng, nó dường như không có một giải pháp chủ đạo mà mọi người chỉ ra.

Tôi nghĩ rất nhiều người đã ở trong hoàn cảnh của tôi và tôi tự hỏi họ đã chọn gì và tại sao?

Trả lời

4

Tôi đã tìm thấy cuối cùng HttpClient này: https://github.com/nahi/httpclient

Tôi đã bắt đầu sử dụng nó, nó phù hợp với tính năng mà tôi muốn, và nhiều hơn nó khá nhanh theo một số chuẩn mực. Nó cũng hỗ trợ một số tính năng nâng cao như phát trực tuyến hoặc trả lời chunked. Thật xấu hổ mặc dù nó không nổi tiếng trong cộng đồng ruby. :)

2

Nếu bạn cần cookie và xử lý biểu mẫu, mechanize là cách duy nhất để thực hiện.

+0

Tôi nghĩ cơ giới hóa mô phỏng toàn bộ trình duyệt, không? – Hartator

+0

Tôi cần thêm một số điều để thực hiện yêu cầu http trực tiếp ... – Hartator

+0

Tôi sử dụng httpclient rất nhiều. Đó là một thư viện tuyệt vời khi bạn muốn thứ gì đó nhẹ. Nhưng nó không làm mọi thứ trong danh sách của bạn và cơ giới hóa. – pguardiario

6

Được xây dựng trong OpenURI là nơi đầu tiên để xem xét. Nó đơn giản và xử lý các vấn đề cơ bản một cách độc đáo.

Typhoeus, mà tôi đã sử dụng nhiều lần cho các quy trình song song, hoạt động tốt. Documentationthe codebase có sẵn tại 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 

Tôi sử dụng Net :: HTTP đôi khi quá, nhưng OpenURI và Typhoeus, với Hydra, đã được chứng minh là dễ sử dụng và tích hợp với mã của tôi.

2

Tôi rất tiếc khi biết rằng Typhoeus không hoạt động cho bạn. Lý do là, rằng README cho thấy việc howto với Typhoeus v0.5.0.rc có thể được cài đặt với

gem install typhoeus --pre 

hoặc

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

. Không có hỗ trợ phiên cho Typhoeus nhưng khác hơn là nó có thể phù hợp. Ít nhất là ổn định của nó như là địa ngục kể từ khi nó được xây dựng trên đầu trang của libcurl.

file gửi Ví dụ:

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

Có thật không may là không có phím tắt để đối phó với các tập tin cookie, bạn phải cài đặt chúng bằng tay:

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

TLDR: Tôi sẽ chọn Typhoeus cho tốc độ của nó và libcurl nếu bạn sẵn sàng tự mình thiết lập. Nếu không, tôi sẽ xem xét Faraday và sử dụng nó với bộ điều hợp Typhoeus.

Chỉnh sửa: Tôi đã thêm hướng dẫn cài đặt vào README.

Chỉnh sửa: 0,5 được phát hành.

10

Đây là ma trận tính năng bao gồm việc chọn các máy khách HTTP cho Ruby.

https://bit.ly/RubyHTTPClients

Tác giả của sự so sánh là tác giả của httpclient, nhưng từ vẻ của nó so sánh là công bằng.

Để có phong cách tường thuật hơn với một số giải thích về ma trận, hãy xem http://www.slideshare.net/HiroshiNakamura/rubyhttp-clients-comparison từ cùng một tác giả.

So sánh xuất hiện một phần có lợi cho httpclient, điều mà tôi cũng có thể đề xuất. Đơn giản, tính năng, tương thích với tất cả các nền tảng Ruby và trình diễn. Hỗ trợ cookie tốt hơn bất kỳ thứ gì khác ngoài đó, nhưng bản trình bày đề cập rằng cookie có thể bị rò rỉ từ một trang web (ác ý) đến trang khác nếu bạn sử dụng cùng một đối tượng khách hàng. Không biết nếu điều này vẫn đúng.

+0

Vâng, nó vẫn là trường hợp cho các công cụ cookie. May mắn thay, đó là một lỗ hổng bảo mật lớn, nó chỉ là bạn có thể thiết lập cookie cho tên miền '.com.'. – Hartator

+0

Miễn là bạn biết về nó, nó có lẽ không phải là một vấn đề lớn. Tôi nghĩ * (đừng tin tôi! Xác minh!) Miễn là bạn khởi tạo hai đối tượng khác nhau cho hai trang web, bạn sẽ ổn thôi. – clacke

+1

không may httpclient không được duy trì tích cực. Tôi tìm thấy [Excon] (https://github.com/geemus/excon) là tốt – w00d

Các vấn đề liên quan