реальный пример из жизни, уведомит Airbrake API about new deployment через NetHttps
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)
Примечание:
в случае, если вы делаете проверку подлинности с помощью авторизации заголовка установить заголовок req['Authorization'] = "Token xxxxxxxxxxxx"
или http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Token.html
Это выглядит, как она должна работать, но post_form переводит параметры в ключе = значение & ключ = значение?. Если вы хотите сделать POST с телом запроса, установленным в строку JSON, я думаю, вам нужно другое решение. –
Это не работает с глубоко вложенным json. Все, что находится за пределами первого уровня, становится строкой. – neoneye
Достаточно просто выглядеть. Оно работает. Это просто. но для простых вещей, таких как пример, который я дал, он работает нормально – Christoffer