19

Python中有一个我喜欢的库,叫做“Requests”。Requests 是基于 urllib3 构建的 HTTP 客户端。“请求文档”。

我在 Ruby 中寻找类似的东西。基本上我需要的是:

  • 上传文件支持(多部分/表单数据)。
  • 轻松获取/发布。
  • Cookie 可以从响应对象传递到请求对象(手动构建登录脚本)。
  • 稳定灵活。
  • 会话支持(如果我们没有,则不必手动处理 cookie)。

我看过 Typhoeus,但主页中的代码示例不起作用;他们已经移动了代码,并且该get方法不再像那样直接访问,所以它开始不好。Curb 看起来不错,我喜欢 cURL,还有 rest-client,它看起来很流行,根据基准,em-http 似乎很快。还有一个Patron和curb-fu,我没有时间尝试。当然,还有 Net:HTTP。但是,它似乎没有每个人都指向的主流解决方案。

我想很多人都遇到过我的情况,我想知道他们选择了什么,为什么?

4

8 回答 8

11

这是一个特征矩阵,其中包含了一些用于 Ruby 的 HTTP 客户端。

https://bit.ly/RubyHTTPClients

比较的作者是 的作者httpclient,但从外观上看,比较是公平的。

有关矩阵的一些解释的更多叙述风格,请参阅同一作者的http://www.slideshare.net/HiroshiNakamura/rubyhttp-clients-comparison

比较结果部分支持 httpclient,我也可以推荐它。简单、功能丰富、兼容所有 Ruby 平台并具有高性能。比其他任何东西都更好的 cookie 支持,但演示文稿提到如果您使用相同的客户端对象,cookie 可能会从一个(恶意)站点泄漏到另一个站点。不知道这是否仍然是真的。

于 2013-04-02T09:36:35.960 回答
7

https://github.com/cyx/requests,这正是问题所要求的,来自 python 的请求库的端口。

于 2015-02-10T17:10:26.587 回答
6

内置的OpenURI是首先要看的地方。它很简单,并且很好地处理了基础知识。

Typhoeus,我曾多次用于并行进程,效果很好。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

我偶尔也使用 Net::HTTP,但 OpenURI 和 Typhoeus 与 Hydra 一起被证明易于使用并与我的代码集成。

于 2012-10-30T05:51:02.347 回答
4

你看过HTTParty gem 吗?

于 2012-10-30T04:54:50.790 回答
4

我最终找到了这个 HTTPClient : https://github.com/nahi/httpclient

我已经开始使用它,它符合我想要的功能,而且根据一些基准测试它非常快。它还支持一些高级功能,例如流式处理或分块响应。虽然它在红宝石社区中并不出名,但很遗憾。:)

于 2012-11-01T17:40:21.573 回答
2

如果您需要 cookie 和表单处理,机械化是唯一的选择。

于 2012-10-30T04:57:44.463 回答
2

我很遗憾听到 Typhoeus 不适合你。原因是,自述文件显示了如何使用 Typhoeus v0.5.0.rc 可以安装

gem install typhoeus --pre

或者

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

. Typhoeus 没有会话支持,但除此之外它可能很合适。至少它非常稳定,因为它是建立在 libcurl 之上的。

文件发送示例:

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

不幸的是,没有快捷方式来处理 cookie,您必须手动设置它们:

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

TLDR:如果您愿意自己设置,我会选择 Typhoeus 的速度和 libcurl。否则我会研究法拉第并将其与 Typhoeus 适配器一起使用。

编辑:我在README中添加了安装说明。

编辑:0.5 发布。

于 2012-10-30T13:35:11.803 回答
1

这个问题似乎缺乏最近的答案。所以我在填补空白。

我自己来自 python,并且喜欢 requests 库,因为它很容易做,我最近在rest_client中发现了一个非常好的 Ruby 等价物

它支持问题中提到的所有功能,并且从可用性的角度来看似乎非常好 - 请求库旨在实现什么。

于 2018-12-04T06:06:36.633 回答