2012-07-09 8 views
10

entiendo cómo hacer una petición HTTP usando la autenticación básica con Ruby rest-clientRubí archivo resto-cliente de carga como los datos del formulario de varias partes con autentificar básica

response = RestClient::Request.new(:method => :get, :url => @base_url + path, :user => @sid, :password => @token).execute 

y la forma de publicar un archivo como datos de formularios de varias partes

RestClient.post '/data', :myfile => File.new("/path/to/image.jpg", 'rb') 

pero no logro entender cómo combinar los dos para publicar un archivo en un servidor que requiere autenticación básica. ¿Alguien sabe cuál es la mejor manera de crear esta solicitud?

+1

en una nota no relacionada: debe aceptar más respuestas, es una buena práctica ... – robustus

Respuesta

20

Cómo sobre el uso de un RestClient::Payload con RestClient::Request ... Por ejemplo:

request = RestClient::Request.new(
      :method => :post, 
      :url => '/data', 
      :user => @sid, 
      :password => @token, 
      :payload => { 
      :multipart => true, 
      :file => File.new("/path/to/image.jpg", 'rb') 
      })  
response = request.execute 
0

La mejor manera más reciente puede ser que: el enlace es enter link description here

RestClient.post(url, 
    { 
    :transfer => { 
     :path => '/foo/bar', 
     :owner => 'that_guy', 
     :group => 'those_guys' 
    }, 
    :upload => { 
     :file => File.new(path, 'rb') 
    } 
    }) 
0

Aquí es un ejemplo con un archivo y algunos datos json:

require 'rest-client' 

payload = { 
    :multipart => true, 
    :file => File.new('/path/to/file', 'rb'), 
    :data => {foo: {bar: true}}.to_json 
     } 

r = RestClient.post(url, payload, :authorization => token) 
0

RestClient API parece haber cambiado. Esta es la última forma de cargar un archivo usando la autenticación básica:

response = RestClient::Request.execute(
    method: :post, 
    url: url, 
    user: 'username', 
    password: 'password', 
    timeout: 600, # Optional 
    payload: { 
    multipart: true, 
    file: File.new('/path/to/file, 'rb') 
    } 
) 
Cuestiones relacionadas