I have already created a basic authentication key, now I am just trying to utilize it. I have tried a few different variations, but none seem to show Authorization in the request headers.
$auth = 'Basic cmFtZXNoQHVzYW1hLmNvbTpyYW1lc2h1JEBtcA=='
@response = resource.post('Authorization' => $auth)
nor
@response = resource.post(:authorization => $auth)
nor
@response = resource.post(:Authorization => $auth)
nor
@response = resource.post(:content_type => :json, :accept => :json, :headers => { 'Authorization:' => $auth })
Unfortunately I am not finding a lot of info in the rdoc that can help me solve this. Does anyone have experience adding auth headers using the Rest Client gem?
Even though I didn't have a payload to send I was trying to send one without. This ended up being the cause. So I included:
And this worked.
If you don't want to use
RestClient::Resource
, you can include basic auth in a request like this:RestClient::Request.execute method: :get, url: url, user: 'username', password: 'secret'
The trick is not to use the
RestClient.get
(or.post
,.put
etc.) methods since all options you pass in there are used as headers.I just did a quick writeup on this over here: https://www.krautcomputing.com/blog/2015/06/21/how-to-use-basic-authentication-with-the-ruby-rest-client-gem/
For Basic Auth, you should be able to set the user and password in plaintext when you create the resource:
But if you really need to set the header directly per request:
should work. If it does not, then you may have set
$auth
incorrectly. However, I think you just missed adding the request payload, so it was using the hash you supplied for that required param, and not setting any headers at all.Here's a complete and working example using
get
(I don't have a test service available with Basic Auth and POST)Note: Though this works, I recommend you use the first and simplest method of supplying user and password to the constructor unless you have good reason not to.