Es 2020: nadie debería usar Net::HTTP
más y todas las respuestas parecen decirlo, use una gema de más alto nivel como Faraday - Github
Dicho esto, lo que me gusta hacer es un envoltorio alrededor de la llamada a la API HTTP, algo que se llama como
rv = Transporter::FaradayHttp[url, options]
porque esto me permite falsificar llamadas HTTP sin dependencias adicionales, es decir:
if InfoSig.env?(:test) && !(url.to_s =~ /localhost/)
response_body = FakerForTests[url: url, options: options]
else
conn = Faraday::Connection.new url, connection_options
Donde el farsante se parece a esto
Sé que hay marcos de burla / stubbing HTTP, pero al menos cuando investigué la última vez no me permitieron validar las solicitudes de manera eficiente y eran solo para HTTP, no, por ejemplo, para intercambios TCP sin procesar, este sistema me permite tener un marco unificado para todas las comunicaciones API.
Suponiendo que solo desea convertir rápido y sucio un hash a json, envíe el json a un host remoto para probar una API y analizar la respuesta a ruby, esta es probablemente la forma más rápida sin involucrar gemas adicionales:
JSON.load `curl -H 'Content-Type:application/json' -H 'Accept:application/json' -X POST localhost:3000/simple_api -d '#{message.to_json}'`
Con suerte, esto no hace falta decirlo, pero no lo use en producción.
req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})