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 или что-то в этом роде? Если он включен, удалите его и попробуйте снова. Если вы не используете объект сопоставления, попробуйте отправить компактное тело вместо отформатированного.
Удачи!