Ruby on rails Http JSON POST请求返回带有ruby的空正文响应

Ruby on rails Http JSON POST请求返回带有ruby的空正文响应,ruby-on-rails,ruby,json,fiware-orion,Ruby On Rails,Ruby,Json,Fiware Orion,我正在使用ruby&services,我尝试检索json响应,但只得到一个空的主体响应: uri = URI("http://.../v1/queryContext") req = Net::HTTP::Post.new(uri.path, initheader = {'content-type' => 'application/json', 'Accept' => 'application/json'}) req.body = { "entities": [

我正在使用ruby&services,我尝试检索json响应,但只得到一个空的主体响应:

uri = URI("http://.../v1/queryContext")
req = Net::HTTP::Post.new(uri.path, initheader = {'content-type' => 'application/json', 'Accept' => 'application/json'})
req.body = {
           "entities": [
           {
               "type": "Printer",
               "isPattern": "false",
               "id": "UM1"
           }
       ]
       }.to_json
       response = Net::HTTP.start(uri.hostname, uri.port) do |http|
         http.request(req)
       end
请求工作正常(状态200/消息正常),但返回的JSON内容不存在(response.body.size=0)。非常奇怪,因为我可以看到它是由服务器生成的

Response payload: '{
  "contextResponses" : [
    {
      "contextElement" : {
        "type" : "Printer",
        "isPattern" : "false",
        "id" : "UM1",
        "attributes" : [
          {
            "name" : "bed",
            "type" : "float",
            "value" : "50"
          },
          {
            "name" : "temperature",
            "type" : "float",
            "value" : "180"
          }
        ]
      },
      "statusCode" : {
        "code" : "200",
        "reasonPhrase" : "OK"
      }
    }
  ]
}
'
此外,以下等效卷曲效果良好:

(curl http://.../v1/queryContext -s -S --header 'Content-Type: application/json' \
    --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
    "entities": [
        {
            "type": "Printer",
            "isPattern": "false",
            "id": "UM1"
        }
    ]
} 
EOF
(卷曲)http://.../v1/queryContext -s-s——标题“内容类型:application/json”\

--标题'Accept:application/json'-d@-| python-mjson.tool)您的代码看起来很好,我建议清除bundle的缓存(
bundle clean--force
)并再次安装包

你也试过在不同的机器上运行它吗

顺便说一下,这里有一个关于使用HTTP库执行json请求的清晰示例:

您的请求正文似乎已格式化。如果您使用对象映射器或et,请检查您的对象映射器是否启用了prettyprint属性或类似属性?如果已启用,请将其删除,然后重试。如果不使用对象映射器,请尝试发送压缩正文而不是格式化正文


祝你好运

谢谢,是的,我在另一台机器上试过了,结果也一样。我还尝试了从服务器进行本地主机连接。好的,明白了。它与函数中运行的响应范围有关,即使其他值(response.status&response.message)良好,response.body也会从函数中丢失。