2015-12-02 7 views
3

Я играл с рубином & услуги, я пытаюсь извлечь ответ JSon, НО только получить пустой ответ тела:запрос Http JSON POST возвращает пустой ответ тела с рубином

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 

Просьбы работает отлично (Status 200/Message OK), но содержимое 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 

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

Благодаря

+0

OK Got It. он был связан с объемом ответа, который выполнялся в функции, даже если другие значения были точными (response.status & response.message), response.body был потерян из функции. –

ответ

4

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

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

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

+0

Спасибо, да я пробовал на другой машине, и получаю тот же результат. Я также попытался подключиться к локальному хосту с сервера. –

0

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

Удачи вам!

Смежные вопросы