2009-05-30 104 views

回答

30

使用OpenURI

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

訪問網站/網頁/資源要求HTTP認證。

+12

老實說,如果我看到一個庫在內部使用open-uri,我不會使用該庫。這是一個深度瑕疵的庫,它建立在深層次的URI解析器之上。在IRB中使用它很好,就是這樣。 – 2009-06-01 19:30:16

+0

@ Sporkmonger:恩,那就是我們所擁有的 - 你有什麼建議,原始的Net :: HTTP? – apostlion 2009-06-02 05:18:51

+7

使用Net :: HTTP或Patron或Curb或其他答案中提到的任何其他庫。這個答案如何被投票或接受是超出我的。 – 2009-10-25 03:22:04

33

如果你喜歡它低級別,也有Typhoeus,它建立在Curl :: Multi之上。

5

還有Mechanize,這是一個非常高級別的網頁抓取客戶端,並使用Nokogiri進行HTML解析。

9

Curb-fu是圍繞路沿石的包裝又使用的libcurl。 Curb-fu提供什麼優於Curb?只是很多語法糖 - 但這通常是你需要的。

4

添加更近的答案,HTTPClient是另一個使用libcurl的Ruby庫,它支持並行線程和很多捲曲好東西。我使用HTTPClient和Typhoeus來處理任何不平凡的應用程序。

7

HTTP clients是一個很好的網頁,可以幫助您做出有關各種客戶的決定。

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 
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來獲取未包含在源代碼下載中的書的代碼。

4

如果你知道如何寫你的要求爲curl命令,有一個在線工具,可以把它變成紅寶石(2.0+)代碼:curl-to-ruby

目前,它知道以下選項:-d/--data-H/--header-I/--head-u/--user--url-X/--request。它是open to contributions