使用 Net/http 以 JSON 格式发布 Ruby 数据
Posting Ruby data in JSON format with Net/http
我有这个 ruby 文件:
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
它试图创建一个新帐户。但是我得到 code: 400, invalid fields in account
。我独立测试了数据,所以我(相对)确定 json 本身的格式没有错误;问题在于尝试以 post_Form
要求的散列格式提交数据。有谁知道使用ruby直接postjson数据而不先转换为散列的方法吗?
像这样创建一个请求对象:
request = Net::HTTP::Post.new(uri.request_uri,
'Content-Type' => 'application/json')
request.body = newAcctJson
resp = http.request(request)
结合问题中的代码和@DVG 的出色回答:
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
我有这个 ruby 文件:
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
它试图创建一个新帐户。但是我得到 code: 400, invalid fields in account
。我独立测试了数据,所以我(相对)确定 json 本身的格式没有错误;问题在于尝试以 post_Form
要求的散列格式提交数据。有谁知道使用ruby直接postjson数据而不先转换为散列的方法吗?
像这样创建一个请求对象:
request = Net::HTTP::Post.new(uri.request_uri,
'Content-Type' => 'application/json')
request.body = newAcctJson
resp = http.request(request)
结合问题中的代码和@DVG 的出色回答:
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