Ruby中类似于cURL的替代品是什么?

71

有没有适用于Ruby的cURL库?

13个回答

92

36

如果你不太喜欢底层编程,也可以尝试使用Typhoeus,它是基于Curl::Multi构建的。


31

使用OpenURI来操作URL。

  open("http://...", :http_basic_authentication=>[user, password])

访问需要HTTP身份验证的网站/页面/资源。


13
说实话,如果我发现一个库在内部使用open-uri,我就不会使用那个库。这是一个基于严重有缺陷的URI解析器构建的极其有缺陷的库。只适合在IRB中使用。 - Bob Aman
@Sporkmonger:好吧,那就是我们所拥有的——你建议使用原始的Net::HTTP吗? - apostlion
8
您可以使用Net::HTTP、Patron、Curb或其他答案中提到的库。这个回答为什么会被投票或接受我不理解。 - Bob Aman
7
也许是因为open-uri是标准库的一部分吧? - konung
3
Net::HTTP和open-uri在处理http方面都声名狼藉,它们表现得很糟糕。 - Jordon Bedwell
如果您需要将登录请求响应中收到的会话保存在cookie中,并且每次获取数据时都需要传递此cookie,该怎么办? - Krishna Prasad Varma

9

Curb-fu是Curb的封装,而Curb则使用libcurl。Curb-fu相比于Curb提供了很多语法糖——但这通常是您所需要的。


8

HTTP客户端是一个很好的页面,可以帮助您决定使用哪个客户端。


7

6

eat gem是OpenURI的“替代品”,因此您需要首先安装gem eat

$ gem install eat

现在你可以使用它。
require 'eat'
eat('http://yahoo.com')                 #=> String
eat('/home/seamus/foo.txt')             #=> String
eat('file:///home/seamus/foo.txt')      #=> String

它在底层使用了HTTPClient。 它还具有一些选项:

eat('http://yahoo.com', :timeout => 10)                   # timeout after 10 seconds
eat('http://yahoo.com', :limit => 1024)                   # only read the first 1024 chars
eat('https://yahoo.com', :openssl_verify_mode => 'none')  # don't bother verifying SSL certificate

1
我无法让它工作。`require': cannot load such file -- eat (LoadError) - Mark Locklear

6
如果你知道如何将你的请求写成一个curl命令,那么有一个在线工具可以将其转换为ruby (2.0+)代码:curl-to-ruby。目前,它支持以下选项:-d/--data-H/--header-I/--head-u/--user--url-X/--request。它是开放的,欢迎贡献

5
这是我写的一个小程序,用于获取一些文件。
base = "http://media.pragprog.com/titles/ruby3/code/samples/tutthreads_"

for i in 1..50

  url = "#{ base }#{ i }.rb"
  file = "tutthreads_#{i}.rb"

  File.open(file, 'w') do |f|   
    system "curl -o #{f.path} #{url}"
  end

end

我知道这段话可能有点不够流畅,但它达到了它的目的。看一下吧。我今天只是把它凑在一起,因为我厌倦了去每个URL获取未包含在源代码下载中的书籍代码。

5

还有一个名为Mechanize的工具,它是一个非常高级的网络爬虫客户端,使用Nokogiri进行HTML解析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接