Python请求库(HTTP客户端)的Ruby等价物

时间:2012-10-30 04:15:03

标签: ruby http

我喜欢Python中的一个名为“请求”的库。请求是在urllib3上构建的HTTP客户端。 “requests doc”。

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

  • 上传文件支持(multipart / form-data)。
  • 轻松上/下。
  • Cookie可以从响应对象传递到请求对象(构建手动登录脚本)。
  • 稳定而灵活。
  • 会话支持(如果我们没有,则不必手动处理cookie)。

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

我想很多人都在我的情况下,我想知道他们选择了什么以及为什么?

8 个答案:

答案 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提供Documentationthe 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等效项。

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