2009-05-30 40 views

Trả lời

30

Sử dụng OpenURI

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

truy cập vào trang web/trang/nguồn lực mà yêu cầu xác thực HTTP.

+12

Thành thật mà nói, nếu tôi thấy rằng thư viện sử dụng open-uri nội bộ, tôi không sử dụng thư viện đó. Đó là một thư viện thiếu sót sâu được xây dựng trên đầu trang của một trình phân tích cú pháp URI thiếu sót. Nó là tốt cho việc sử dụng trong IRB và đó là nó. –

+0

@Sporkmonger: Vâng, đó là những gì chúng tôi có - bạn đề xuất gì, raw Net :: HTTP? – apostlion

+7

Sử dụng Net :: HTTP hoặc Patron hoặc Curb hoặc bất kỳ thư viện nào khác được đề cập trong các câu trả lời khác. Làm thế nào câu trả lời này đã được bình chọn lên hoặc chấp nhận là ngoài tôi. –

33

Nếu bạn thích nó ít cấp thấp hơn, cũng có Typhoeus, được xây dựng trên đầu trang của Curl :: Multi.

+5

Tôi tự hỏi tại sao bạn bị bỏ rơi? – method

+0

404 link ....;) –

+0

Tôi muốn thông báo cho bạn biết rằng liên kết hiện đã được sửa. – ryenus

5

Ngoài ra còn có Mechanize, là một trình duyệt web có mức độ rất cao và sử dụng Nokogiri để phân tích cú pháp HTML.

7

Bạn cũng có thể có một cái nhìn tại Rest-Client

+2

Heroku | Không có ứng dụng nào như vậy – Ramy

9

Curb-fu là một wrapper quanh Curb mà lần lượt sử dụng libcurl. Curb-fu cung cấp gì hơn Curb? Chỉ cần rất nhiều cú pháp - nhưng đó có thể là những gì bạn cần.

4

Thêm câu trả lời gần đây hơn, HTTPClient là một thư viện Ruby khác sử dụng libcurl, hỗ trợ các chuỗi song song và rất nhiều tiện ích mở rộng. Tôi sử dụng HTTPClient và Typhoeus cho bất kỳ ứng dụng không tầm thường nào.

7

HTTP clients là trang tốt để giúp bạn đưa ra quyết định về các khách hàng khác nhau.

6

các eat đá quý là một "thay thế" cho 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 

Nó sử dụng HTTPClient dưới mui xe. Nó cũng có một số tùy chọn:

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 
+0

Tôi không thể làm việc này. 'require ': không thể tải tập tin - ăn (LoadError) – Lumbee

4

Đây là một chương trình nhỏ tôi đã viết để tải một số tệp.

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 

Tôi biết nó có thể hùng hồn hơn một chút nhưng nó phục vụ mục đích. Kiểm tra nó ra. Hôm nay, tôi đã kết hợp nó với nhau bởi vì tôi cảm thấy mệt mỏi khi truy cập vào từng URL để lấy mã cho cuốn sách không có trong bản tải xuống nguồn.

4

Nếu bạn biết làm thế nào để viết yêu cầu của bạn như là một lệnh curl, có một công cụ trực tuyến có thể biến nó thành ruby ​​(2.0+) mã: curl-to-ruby

Hiện nay, nó biết các tùy chọn sau: -d/--data, -H/--header , -I/--head, -u/--user, --url-X/--request. Đó là open to contributions.

Các vấn đề liên quan