Đó là năm 2020 - không ai nên sử dụng Net::HTTP
nữa và tất cả các câu trả lời dường như đang nói như vậy, hãy sử dụng một viên ngọc cấp cao hơn như Faraday - Github
Điều đó nói rằng, những gì tôi muốn làm là bao bọc xung quanh lệnh gọi HTTP api, một cái gì đó được gọi là
rv = Transporter::FaradayHttp[url, options]
bởi vì điều này cho phép tôi giả mạo các cuộc gọi HTTP mà không có phụ thuộc bổ sung, tức là:
if InfoSig.env?(:test) && !(url.to_s =~ /localhost/)
response_body = FakerForTests[url: url, options: options]
else
conn = Faraday::Connection.new url, connection_options
Nơi mà faker trông giống như thế này
Tôi biết có các khuôn khổ bắt chước / sơ khai HTTP, nhưng ít nhất khi tôi nghiên cứu lần trước, chúng không cho phép tôi xác thực các yêu cầu một cách hiệu quả và chúng chỉ dành cho HTTP, không phải ví dụ cho các trao đổi TCP thô, hệ thống này cho phép tôi có khung thống nhất cho tất cả các giao tiếp API.
Giả sử bạn chỉ muốn chuyển đổi một cách nhanh chóng và bẩn thỉu một băm thành json, hãy gửi json đến một máy chủ từ xa để kiểm tra API và phân tích cú pháp phản hồi với ruby, đây có lẽ là cách nhanh nhất mà không cần thêm đá quý:
JSON.load `curl -H 'Content-Type:application/json' -H 'Accept:application/json' -X POST localhost:3000/simple_api -d '#{message.to_json}'`
Hy vọng rằng điều này không cần phải nói, nhưng không sử dụng điều này trong sản xuất.
req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})