Я пишу фиктивный сервер на Ruby для тестирования нашего внутреннего API. Я хотел бы включить тело запроса POST в ответ сервера. Я использую Net :: HTTP :: Server и Net :: HTTP класс.
Прямо сейчас макет сервера выглядит так:
require 'net/http/server'
require 'pp'
require 'json'
Net::HTTP::Server.run(:port => 8080) do |request,stream|
pp request
[200, {'Content-Type' => 'text/html'}, [request[:body]]]
end
Сценарий, который отправляет POST-запрос с телом, выглядит так:
require 'net/http'
require 'uri'
url = URI.parse(http://localhost:8080/)
x = {"country" => "Ukraine", "city" => 'Kiev'}
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url.path)
request.set_form_data(x)
response = http.request(request)
puts "Request body: #{request.body}"
puts "Response Body: #{response.body}"
Однако журнал сервера указывает, что запрос POST не содержал тела:
#Output from server
{:method=>"POST"@0,
:uri=>{:path=>"/"},
:version=>"1.1"@12,
:headers=>
{"Accept"@17=>"*/*"@25,
"User-Agent"@30=>"Ruby"@42,
"Content-Type"@48=>"application/x-www-form-urlencoded"@62,
"Connection"@97=>"close"@109,
"Host"@116=>"localhost:8080"@122,
"Content-Length"@138=>"25"@154}}
#Output from script file:
Request body: country=Ukraine&city=Kiev
Response body:
Что я сделал не так?
Related: Анализировать тело запроса POST на самодельном сервере в Ruby