Python请求库的Ruby等效项(HTTP客户端)

xiozqbni  于 2022-11-04  发布在  Ruby
关注(0)|答案(8)|浏览(134)

Python中有一个我很喜欢的库,叫做“Requests”。Requests是一个基于urllib 3.“requests doc“的HTTP客户端。
我正在寻找类似的东西在Ruby。基本上我需要的是:

  • 上传文件支持(多部分/表单数据)。
  • 容易得到/邮寄。
  • Cookie可以从响应对象传递到请求对象(手动构建登录脚本)。
  • 稳定且灵活。
  • 会话支持(如果我们没有的话,也不必手动处理cookie)。

我看过Typheus,但是主页中的代码示例不起作用;他们已经移动了代码,get方法不再是那样直接访问的,所以它开始的时候不太好。Curb看起来不错,我喜欢cURL,还有rest-client,它看起来很流行,em-http看起来很快,根据基准测试。还有Patron和curb-fu,我还没有时间去尝试。当然,还有Net:HTTP。但是,它似乎没有一个大家都指向的主流解决方案。
我想很多人都有我的处境,我想知道他们选择了什么,为什么?

qyyhg6bp

qyyhg6bp1#

比较的作者是httpclient的作者,但从表面上看,比较是公平的。
对于更多的叙述风格和一些矩阵的解释,请参阅同一作者的http://www.slideshare.net/HiroshiNakamura/rubyhttp-clients-comparison
比较结果部分支持httpclient,我也可以推荐它。简单,功能丰富,兼容所有Ruby平台,性能好。比其他任何东西都更好的cookie支持,但是演示文稿提到,如果使用相同的客户端对象,cookie可能会从一个(恶意)站点泄漏到另一个站点。不知道这是否仍然正确。

bttbmeg0

bttbmeg02#

https://github.com/cyx/requests,这正是这个问题所要求的,它是python的requests lib的一个端口。

lf3rwulv

lf3rwulv3#

内置的OpenURI是第一个要看的地方。它很简单,很好地处理了基本问题。
Typheus,我已经在并行处理中使用过几次了,工作得很好。

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和Typheus以及Hydra已经证明很容易使用,并且可以与我的代码集成。

lqfhib0f

lqfhib0f4#

我最终找到了这个HTTPClient:https://github.com/nahi/httpclient
我已经开始使用它了,它符合我想要的功能,而且根据一些基准测试,它的速度非常快。它还支持一些高级功能,如流媒体或分块响应。虽然它在Ruby社区中并不出名,但这很遗憾。:)

9rygscc1

9rygscc16#

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

2vuwiymt

2vuwiymt7#

很遗憾,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:如果您愿意自己设置,我会选择Typheus,因为它的速度和libcurl。否则,我会研究Faraday,并将其与Typheus适配器一起使用。

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

6ovsh4lw

6ovsh4lw8#

这个问题似乎缺乏最近的答案。我也在填补空白。
我自己来自python,并且喜欢requests库,因为它可以轻松地完成任务,最近我在rest_client中发现了一个非常好的Ruby等价物
它支持问题中提到的所有特性,并且从可用性的Angular 看似乎非常好--这是库所要实现的要求。

相关问题