我喜欢Python中的一个名为“请求”的库。请求是在urllib3上构建的HTTP客户端。 “requests doc”。
我在Ruby中寻找类似的东西。基本上我需要的是:
我看过Typhoeus,但主页中的代码示例不起作用;他们已经移动了代码并且get
方法不再像这样直接访问,所以它不能很好地开始。 Curb似乎很好,我喜欢cURL,还有rest-client,这看起来很受欢迎,而em-http根据基准测试似乎相当快。还有一个Patron和curb-fu,我没有时间去尝试。当然还有Net:HTTP。但是,它似乎没有一个人人都指出的主流解决方案。
我想很多人都在我的情况下,我想知道他们选择了什么以及为什么?
答案 0 :(得分:10)
这是一个功能矩阵,其中包含一系列适用于Ruby的HTTP客户端。
https://bit.ly/RubyHTTPClients
比较的作者是httpclient
的作者,但从它的外观来看,比较是公平的。
有关矩阵的一些解释的更具叙述性的风格,请参阅同一作者的http://www.slideshare.net/HiroshiNakamura/rubyhttp-clients-comparison。
比较结果部分支持httpclient,我也可以推荐。简单,功能强大,兼容所有Ruby平台和高性能。比其他任何东西都更好的cookie支持,但是演示文稿提到如果你使用相同的客户端对象,cookie可能会从一个(恶意)站点泄漏到另一个(恶意)站点。不知道这是否仍然存在。
答案 1 :(得分:6)
内置的OpenURI是第一个看的地方。它很简单,很好地处理基础知识。
Typhoeus,我多次用于并行处理,效果很好。 Github提供Documentation和the codebase。
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,但是使用Hydra的OpenURI和Typhoeus已被证明易于使用并与我的代码集成。
答案 2 :(得分:6)
有https://github.com/cyx/requests,这正是问题所要求的,来自python的请求lib的端口。
答案 3 :(得分:4)
你看过HTTParty宝石了吗?
答案 4 :(得分:4)
我最终找到了这个HTTPClient: https://github.com/nahi/httpclient
我已经开始使用它,它与我想要的功能相匹配,根据一些基准测试,它的速度非常快。它还支持一些高级的东西,如流式传输或分块响应。虽然它在红宝石社区并不出名,但这很遗憾。 :)
答案 5 :(得分:2)
如果您需要Cookie和表单处理,mechanize是唯一的方法。
答案 6 :(得分:2)
我很遗憾听到,Typhoeus没有为你效劳。原因是README显示如何使用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。否则我会调查Faraday并将其与Typhoeus适配器一起使用。
编辑:我已将安装说明添加到README。
编辑:0.5已发布。
答案 7 :(得分:1)
这个问题似乎缺少最新的答案。因此,我要填补空白。
来自python我自己,并且喜欢它的简单功能,最近我在rest_client
中发现了一个非常漂亮的Ruby等效项。它支持问题中提到的所有功能,并且从可用性的角度来看非常好-请求库旨在实现什么。