6

I have this ruby file:

require 'net/http'
require 'json'
require 'uri'
    #test data

newAcctJson ='{
  "type": "Credit Card",
  "nickname": "MoreTesting",
  "rewards": 2,
  "balance": 50
}'

    #creates a new account
def createAcct(custID, json)
    url = "http://api.reimaginebanking.com:80/customers/#{custID}/accounts?key=#{APIkey}"
    uri = URI.parse(url)
    http = Net::HTTP.new(uri.host, uri.port)
    myHash = JSON.parse(json)
    resp = Net::HTTP.post_form(uri, myHash)
    puts(resp.body)
end

which attempts to create a new account. However I get code: 400, invalid fields in account. I tested the data independently, so I'm (relatively) certain that the json itself isn't in an incorrect format; the problem is in trying to submit the data in the hash format that the post_Form requires. Does anyone know a way to use ruby to directly post json data without converting to a hash first?

1

2 Answers 2

11

Make a request object like so:

request = Net::HTTP::Post.new(uri.request_uri, 
          'Content-Type' => 'application/json')
request.body = newAcctJson
resp = http.request(request)
Sign up to request clarification or add additional context in comments.

2 Comments

where is the http variable coming from?
@mr.musicman - the question shows http = Net::HTTP.new(uri.host, uri.port)
4

To combine the code from the question and @DVG's excellent answer:

require 'net/http'
#require 'json' - not needed for the example
require 'uri'

#test data
newAcctJson ='{
  "type": "Credit Card",
  "nickname": "MoreTesting",
  "rewards": 2,
  "balance": 50
}'

#creates a new account
def createAcct(custID, json)
  url = "http://api.reimaginebanking.com:80/customers/#{custID}/accounts?key=#{APIkey}"
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)

  request = Net::HTTP::Post.new(
    uri.request_uri, 
    'Content-Type' => 'application/json'
  )
  request.body = newAcctJson

  response = http.request(request)
  puts(response.body)
end

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.