Как вызвать JDoodle API с локального сервера Rails?
Я звоню в JDoodle API с пост-запросом с моего Rails-сервера на моей локальной машине с действительным идентификатором и секретом. Я не получаю желаемого ответа. Пожалуйста, предложите мне, если я делаю неправильно....
Моя функция Ruby для вызова API
def run_Jddodle_API
require 'net/http'
require 'uri'
require 'json'
uri = URI.parse("https://api.jdoodle.com/v1/execute")
request = Net::HTTP::Post.new(uri)
request.content_type = "application/json; charset=UTF-8"
request.body = {
"clientId" => "ddc371fd*************c8efbae",
"clientSecret" => "4ee8e79a225***************************a8ee7f331aeeca603",
"script" => "<?php printf(\"hello RAJA\"); ?>",
"language" => "php",
"versionIndex" => "0"
}.to_json
req_options = { use_ssl: uri.scheme == "https", }
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
puts response.body
end
И ответ
{"error":"Unauthorized Request","statusCode":401}
2 ответа
Решение
Попробуйте изменить эту строку:
request.content_type = "application/json; charset=UTF-8"
к этому:
request.content_type = "application/json"
Я изменил код, как показано ниже, и он работал, но не могу сказать, почему.
require 'uri'
require 'net/http'
require 'net/https'
url = URI("https://api.jdoodle.com/v1/execute")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url.path)
request["Content-Type"] = 'application/json'
request.body = {
"script" => params[:code],
"language" => params[:lang],
"versionIndex" => params[:version],
"clientId" => "dc37******************efbae",
"clientSecret" => "4ee8e79a225a5525*******************************************"
}.to_json
response = http.request(request)
puts response.read_body`