Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Net/http发布JSON格式的Ruby数据_Ruby_Json_Net Http - Fatal编程技术网

使用Net/http发布JSON格式的Ruby数据

使用Net/http发布JSON格式的Ruby数据,ruby,json,net-http,Ruby,Json,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 = "h

我有一个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,帐户中的字段无效
。我独立地测试了数据,所以我(相对地)确定json本身的格式没有错误;问题在于试图以
post\u表单所需的哈希格式提交数据。有人知道如何使用ruby直接发布json数据而不首先转换为哈希吗?

创建如下请求对象:

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

http
变量来自哪里?@mr.musicman-问题显示http=Net::http.new(uri.host,uri.port)
可能重复的