等价于Ruby的cURL?


Answers:


30

使用OpenURI

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

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


13
老实说,如果我看到一个库在内部使用open-uri,那么我就不会使用该库。这是一个建立在严重漏洞的URI解析器之上的严重漏洞的库。可以在IRB中使用就可以了。
鲍勃·阿曼

@Sporkmonger:恩,这就是我们所拥有的-您的建议是原始Net :: HTTP?
09年

8
使用Net :: HTTP或Patron或Curb或其他答案中提到的任何其他库。这个答案如何被投票或接受是我无法解决的。
鲍勃·阿曼

7
好吧,也许因为open-uri是标准库的一部分?
konung 2011年

3
Net :: HTTP和open-uri在处理http方面都非常糟糕。
乔登·贝德威尔


36

如果您不喜欢它的底层,那么还有Typhoeus,它建在Curl :: Multi之上。


9

Curb-fuCurb的包装,后者又使用libcurl。与遏制相比,遏制提供了什么?只是很多语法糖-但这通常可能是您需要的。




6

eat宝石是“替代”为OpenURI:

# first do 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

我无法使它正常工作。`require':无法加载此类文件-eat(LoadError)
Mark Locklear

6

如果您知道如何将请求作为curl命令编写,那么有一个在线工具可以将其转换为ruby(2.0+)代码:curl-to-ruby

目前,它知道下面的选项:-d/--data-H/--header-I/--head-u/--user--url,和-X/--request。它是开放的贡献


5

还有Mechanize,这是一个非常高级的Web抓取客户端,使用Nokogiri进行HTML解析。


4

添加了一个更新的答案,HTTPClient是另一个使用libcurl的Ruby库,它支持并行线程和大量curl插件。我对任何不重要的应用程序都使用HTTPClient和Typhoeus。


4

这是我编写的一个用于获取一些文件的小程序。

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来获取源代码下载中未包含的书的代码。


1

为了说明可能太明显了,刻度线也执行Ruby中的shell代码。假设您的Ruby代码在具有以下内容的shell中运行curl

puts `curl http://www.google.com?q=hello`

要么

result = `
  curl -X POST https://www.myurl.com/users \
  -d "name=pat" \
  -d "age=21"
` 
puts result
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.