2009-05-30 22 views

Respuesta

30

Uso OpenURI y

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

acceso a sitios/páginas/recursos que requieren autenticación HTTP.

+12

Honestamente, si veo que una biblioteca usa open-uri internamente, no uso esa biblioteca. Es una biblioteca profundamente defectuosa construida sobre un analizador URI profundamente defectuoso. Está bien para el uso en IRB y eso es todo. –

+0

@Sporkmonger: Bueno, eso es lo que tenemos, ¿qué sugieres, Net :: HTTP en bruto? – apostlion

+7

Use Net :: HTTP o Patron o Curb o cualquiera de las otras bibliotecas mencionadas en las otras respuestas. Cómo se votó o aceptó esta respuesta me supera. –

33

Si te gusta menos de bajo nivel, también está Typhoeus, que está construido sobre Curl :: Multi.

+5

¿Me pregunto por qué lo bajaron? – method

+0

404 link ....;) –

+0

Me gustaría informarle que el enlace está ahora corregido. – ryenus

5

También hay Mechanize, que es un cliente de raspado web de muy alto nivel, y utiliza Nokogiri para el análisis de HTML.

7

También puede echar un vistazo a Rest-Client

+2

Heroku | No existe tal aplicación – Ramy

9

Curb-fu es una envoltura alrededor de encintado que a su vez utiliza libcurl. ¿Qué ofrece Curb-fu sobre Curb? Simplemente mucha azúcar sintáctica, pero eso puede ser a menudo lo que necesitas.

4

Agregando una respuesta más reciente, HTTPClient es otra biblioteca de Ruby que usa libcurl, admite subprocesos paralelos y muchos objetos del curl. Uso HTTPClient y Typhoeus para cualquier aplicación no trivial.

7

HTTP clients es una buena página para ayudarlo a tomar decisiones sobre los distintos clientes.

6

la eat joya es una "sustitución" de 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 

Se utiliza HTTPClient bajo el capó. También tiene algunas opciones:

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

No puedo hacer que esto funcione. 'require ': no ​​se puede cargar dicho archivo - eat (LoadError) – Lumbee

4

Aquí hay un pequeño programa que escribí para obtener algunos archivos.

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 

Sé que podría ser un poco más elocuente, pero sirve para su propósito. Echale un vistazo. Acabo de improvisarlo porque me cansé de ir a cada URL para obtener el código del libro que no estaba incluido en la descarga de la fuente.

4

Si usted sabe cómo escribir su solicitud como un comando curl, no es una herramienta en línea que pueden convertirlo en rubí (2.0+) Código: curl-to-ruby

Actualmente, se sabe que las siguientes opciones: -d/--data, -H/--header , -I/--head, -u/--user, --url y -X/--request. Es open to contributions.