Ruby는 JSON 요청을 보냅니다.
Ruby에서 JSON 요청을 어떻게 보내나요? JSON 객체가 있지만 할 수 있다고 생각하지 않습니다 .send
. 양식을 자바 스크립트로 보내야합니까?
아니면 루비에서 net / http 클래스를 사용할 수 있습니까?
헤더-콘텐츠 유형 = json 및 본문 json 객체?
uri = URI('https://myapp.com/api/v1/resource')
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
req.body = {param1: 'some value', param2: 'some other value'}.to_json
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
require 'net/http'
require 'json'
def create_agent
uri = URI('http://api.nsa.gov:1337/agent')
http = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.path, 'Content-Type' => 'application/json')
req.body = {name: 'John Doe', role: 'agent'}.to_json
res = http.request(req)
puts "response #{res.body}"
rescue => e
puts "failed #{e}"
end
HTTParty 는 이것을 조금 더 쉽게 만듭니다 (그리고 내가 본 다른 예제에서는 작동하지 않는 중첩 된 json 등에서 작동합니다.
require 'httparty'
HTTParty.post("http://localhost:3000/api/v1/users", body: {user: {email: 'user1@example.com', password: 'secret'}}).body
Tom이 링크하는 것보다 더 간단한 것이 필요한 사람들을위한 간단한 json POST 요청 예제 :
require 'net/http'
uri = URI.parse("http://www.example.com/search.json")
response = Net::HTTP.post_form(uri, {"search" => "Berlin"})
실제 사례, NetHttps 를 통해 새 배포에 대해 Airbrake API에 알립니다.
require 'uri'
require 'net/https'
require 'json'
class MakeHttpsRequest
def call(url, hash_json)
uri = URI.parse(url)
req = Net::HTTP::Post.new(uri.to_s)
req.body = hash_json.to_json
req['Content-Type'] = 'application/json'
# ... set more request headers
response = https(uri).request(req)
response.body
end
private
def https(uri)
Net::HTTP.new(uri.host, uri.port).tap do |http|
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
end
end
project_id = 'yyyyyy'
project_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
url = "https://airbrake.io/api/v4/projects/#{project_id}/deploys?key=#{project_key}"
body_hash = {
"environment":"production",
"username":"tomas",
"repository":"https://github.com/equivalent/scrapbook2",
"revision":"live-20160905_0001",
"version":"v2.0"
}
puts MakeHttpsRequest.new.call(url, body_hash)
메모:
Authorization 헤더 세트 헤더 req['Authorization'] = "Token xxxxxxxxxxxx"
또는 http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Token.html을 통해 인증을 수행하는 경우
Assuming you just want to quick&dirty convert a hash to json, send the json to a remote host to test an API and parse response to ruby this is probably fastest way without involving additional gems:
JSON.load `curl -H 'Content-Type:application/json' -H 'Accept:application/json' -X POST localhost:3000/simple_api -d '#{message.to_json}'`
Hopefully this goes without saying, but don't use this in production. Try Faraday gem, Mislav gives a compelling argument why: http://mislav.uniqpath.com/2011/07/faraday-advanced-http/
I like this light weight http request client called `unirest'
gem install unirest
usage:
response = Unirest.post "http://httpbin.org/post",
headers:{ "Accept" => "application/json" },
parameters:{ :age => 23, :foo => "bar" }
response.code # Status code
response.headers # Response headers
response.body # Parsed body
response.raw_body # Unparsed body
This works on ruby 2.4 HTTPS Post with JSON object and the response body written out.
require 'net/http' #net/https does not have to be required anymore
require 'json'
require 'uri'
uri = URI('https://your.secure-url.com')
Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
request = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
request.body = {parameter: 'value'}.to_json
response = http.request request # Net::HTTPResponse object
puts "response #{response.body}"
end
The net/http api can be tough to use.
require "net/http"
uri = URI.parse(uri)
Net::HTTP.new(uri.host, uri.port).start do |client|
request = Net::HTTP::Post.new(uri.path)
request.body = "{}"
request["Content-Type"] = "application/json"
client.request(request)
end
data = {a: {b: [1, 2]}}.to_json
uri = URI 'https://myapp.com/api/v1/resource'
https = Net::HTTP.new uri.host, uri.port
https.use_ssl = true
https.post2 uri.path, data, 'Content-Type' => 'application/json'
참고URL : https://stackoverflow.com/questions/2024805/ruby-send-json-request
'your programing' 카테고리의 다른 글
다른 문자열 리터럴에 대한 두 문자 포인터의 주소가 동일합니다. (0) | 2020.10.07 |
---|---|
fork ()의 목적은 무엇입니까? (0) | 2020.10.07 |
WinForms 애플리케이션에서 모든 '처리되지 않은'예외를 포착하는 것을 어떻게 만들 수 있습니까? (0) | 2020.10.07 |
웹 개발 배우기 : Django vs Node vs Rails vs Others (0) | 2020.10.07 |
Ruby, 경로 + 파일 이름에서 경로 가져 오기 (0) | 2020.10.07 |