2011-06-22 57 views
4

我是新来的Ruby on Rails的,并试图简单地测试,如果我可以简单地做类似下面从我的控制器:使用Ruby on Rails的发送HTTP请求

卷曲-v -H“内容类型: application/json“-X GET -d”{bbrequest:BBTest reqid:44 data:{name:“test”}}“http://localhost:8099

在您的HTTP请求中发送JSON的最佳做法是什么?

感谢

回答

17

你可以做这样的事情:

def post_test 
    require 'net/http' 
    require 'json' 

    @host = 'localhost' 
    @port = '8099' 

    @path = "/posts" 

    @body ={ 
    "bbrequest" => "BBTest", 
    "reqid" => "44", 
    "data" => {"name" => "test"} 
    }.to_json 

    request = Net::HTTP::Post.new(@path, initheader = {'Content-Type' =>'application/json'}) 
    request.body = @body 
    response = Net::HTTP.new(@host, @port).start {|http| http.request(request) } 
    puts "Response #{response.code} #{response.message}: #{response.body}" 
end 

查找Net::HTTP以获取更多信息。

+0

当我使用以下命令向服务器发送HTTP请求时:curl -v -H“Content-Type:application/json”-X GET -d“{”bbrequest“:”BBTest“,”reqid“:”44“, “data”:{“name”:“test”}}“http:// localhost:8099 ...我的服务器将JSON数据视为”{bbrequest:BBTest,reqid:44,data:{name:test}}“ 当我使用您建议的代码发送请求时,它将其视为“{\”bbrequest \“:\”BBTest \“,\”reqid \“:\”44 \“,\”data \“:{ \“name \”:\“ 测试\”}}“和服务器无法解析它,也许有一些额外的选项,我需要设置从红宝石发送请求以排除这些额外的字符?你能帮忙吗? 在此先感谢。 –

+0

这是因为将散列转换为json格式。你将不得不解码它。例如。 '{“a”=>“b”}。to_json'给你'“{\”a \“:\”b \“}”'和'ActiveSupport :: JSON.decode(“{\”a \“: \“b \”}“)'给你'{”a“=>”b“}'。 – David