13

I understand how to make an http request using basic authentication with Ruby's rest-client

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

and how to post a file as multipart form data

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

but I can't seem to figure out how to combine the two in order to post a file to a server which requires basic authentication. Does anyone know what is the best way to create this request?

1
  • 1
    on a not related note: you should accept more answers, its good practice... Commented Jul 9, 2012 at 11:20

4 Answers 4

31

How about using a RestClient::Payload with RestClient::Request... For an example:

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
Sign up to request clarification or add additional context in comments.

Comments

3

RestClient API seems to have changed. Here's the latest way to upload a file using basic auth:

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')
  }
)

Comments

1

The newest best way may be that: the link is enter link description here

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

Comments

1

Here is an example with a file and some json data:

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)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.