首页ruby
hfpp2012

Ruby 的 http request 库介绍

hfpp2012发布于

1. 介绍

使用linux的curl工具,或者是ruby的net/http库都可以发起http请求,然而curl只是一个命令行工具,ruby的net/http库的功能不够强大,抽象能力不足,所以有很多开发者基于这两者之上实现了功能更为丰富和强大的库。

curl工具是用c语言写的开源工具,它有提供c语言头文件的接口libcurl,只要我们的ruby库实现这个libcurl的扩展,也是可以实现高性能的库的。

2. http request库

下面我们来介绍几个比较实用且有各种特色的http request库。

2.1 curb

curb是一个纯c实现libcurl的库。它性能比较高,毕竟是纯c实现,拥有http request的基本功能,例如GET请求,POST请求,DELETE等请求,设置头信息,基本认证,上传文件,https,代理,除此之外,它还支持同时处理多个请求,还支持回调,设置请求的超时时间。总体而言,它的功能并不算多强大,但性能好。

2.2 typhoeus

typhoeus是一个功能超级强大的库。它是基于ethon实现的,而ethon是实现libcurl的库,所以,最终而言,typhoeus也是纯c实现libcurl的库。ethon对libcurl的实现只有很简单的功能,所以typhoeus对ethon进行了更高层次的抽象包装。

typhoeus除了拥有基本的http请求的功能,还支持对下载文件的流式处理,同时发起多个请求。它表现出色的地方在于发起多个请求的并发处理,且能够把请求的结果缓存起来,这点可以结合rails,redis等来实现更为复杂有用的功能。除此之外,typhoeus还能对请求的结果进行gzip压缩,而且它能够从文件中读取cookie信息。

总体而言,typhoeus是一个性能比较高,功能比较强大的库,但需要查询很多数据的时候可以考虑用它。例如可以用它来查询elasticsearch的数据。

2.3 httparty

httparty是基于net/http库实现的。它还依赖于jsonmulti_xml。它的功能比较简单,响光点在于处理json或xml数据,比如由服务器返回的json或xml数据,它就可以直接解析并读取处理,它也能方便地post json或xml数据到服务器。

2.4 em-http-request

em-http-request是一个基于eventmachine的库。这个库的主要特点在于异步,性能好。它的功能也比较强大,除了基本功能,它还支持Keep-Alive持久性链接,和HTTP Pipelining链接,而能与中间件的形式存在。如果追求性能,可以考虑这个库。

2.5 excon

excon是一个基于ruby的标准库socket实现的库。它的功能强大,支持持久链接,时间超时,retry机制,Chunked Requests,Pipelining Requests,Streaming Responses等,由于它是基于socket实现的,它还支持Unix Socket链接,还可以在socket编程基础上修改请求。很特别的是,它还能和 ActiveSupport::Notifications结合。

2.6 faraday

faraday是对以下几个库的统一封装:

  • Net::HTTP (default)
  • Net::HTTP::Persistent
  • Excon
  • Typhoeus
  • Patron
  • EventMachine
  • HTTPClient

这几个库就是相当于faraday的适配器或引擎,好处就是可以随意的换适配器,坏处就是,既然是统一封装,就不能照顾到每个库的特性。

2.7 rest-client

rest-client是基于net/http实现的高度抽象的库。它使用起来比较简单,但性能较为低下。

完结。

本站帖子均为原创内容,如需转载请注明出处,谢谢。

0 条回复
暂无回复~~
喜欢
友情提示
   官方 QQ 1 群 697272886(500/2000)
   官方 QQ 2 群 856141852

© Rails365 | 隐私条款 | 服务条款 | 粤ICP备15004902号 | 在线学员:17

Top