HTTP-запрос JSON POST возвращает пустой ответ тела с ruby

Я играю с 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 отлично работает:

(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

У меня точно такая же проблема с использованием драгоценных камней, таких как httpclient или unirest. Есть ли в Ruby что-то особенное, что нужно сделать, чтобы получить ожидаемое содержимое json?

Спасибо

2 ответа

Ваш код выглядит нормально, я бы предложил очистить кеш пакета (bundle clean --force) и снова установите пакеты.

Вы также пытались запустить его на другой машине?

Кстати, вот четкий пример выполнения запроса json с используемой библиотекой HTTP: https://www.socialtext.net/open/very_simple_rest_in_ruby_part_3_post_to_create_a_new_workspace

Кажется, тело вашего запроса довольно отформатировано. Если вы используете объект маппер или эт. не могли бы вы проверить, чтобы ваш объектный картограф включил свойство prettyprint или что-то в этом роде? Если он включен, удалите его и попробуйте снова. Если вы не используете объект сопоставления, попробуйте отправить компактное тело вместо отформатированного.

Удачи!

Другие вопросы по тегам