Es ist 2020 - niemand sollte Net::HTTP
mehr verwenden und alle Antworten scheinen dies zu sagen. Verwenden Sie ein höherwertiges Juwel wie Faraday - Github
Das heißt, was ich gerne mache, ist ein Wrapper um den HTTP-API-Aufruf, so etwas heißt
rv = Transporter::FaradayHttp[url, options]
weil dies mir erlaubt, HTTP-Aufrufe ohne zusätzliche Abhängigkeiten zu fälschen, dh:
if InfoSig.env?(:test) && !(url.to_s =~ /localhost/)
response_body = FakerForTests[url: url, options: options]
else
conn = Faraday::Connection.new url, connection_options
Wo die Fälscher so etwas wie sieht diese
Ich weiß, dass es HTTP-Mocking / Stubbing-Frameworks gibt, aber zumindest als ich das letzte Mal nachforschte, erlaubten sie mir nicht, Anforderungen effizient zu validieren, und sie waren nur für HTTP, nicht zum Beispiel für rohen TCP-Austausch, dieses System ermöglicht mir ein einheitliches Framework für die gesamte API-Kommunikation.
Angenommen, Sie möchten einen Hash nur schnell und schmutzig in JSON konvertieren, senden Sie den JSON an einen Remote-Host, um eine API zu testen und die Antwort auf Ruby zu analysieren. Dies ist wahrscheinlich der schnellste Weg, ohne zusätzliche Edelsteine zu verwenden:
JSON.load `curl -H 'Content-Type:application/json' -H 'Accept:application/json' -X POST localhost:3000/simple_api -d '#{message.to_json}'`
Hoffentlich ist das selbstverständlich, aber verwenden Sie dies nicht in der Produktion.
req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})