Pudiera darse el caso de que halles algún problema con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al proyecto final.
Solución:
Los cuerpos de las solicitudes se definen mediante el marcado de un formulario. En la etiqueta del formulario hay un attribute llamado
enctype
este attribute le dice al navegador cómo codificar los datos del formulario. Hay varios valores diferentes este
attribute puede tener. El valor predeterminado es application/x-www-form-urlencoded, que le indica al navegador que codifique todos los valores.
entonces, cuando queramos enviar datos para enviar el formulario con esos datos como parámetros del formulario, el encabezado enviará application/x-www-form-urlencoded
para definir enctype
http.set_form_data(param_hash)
Para tu
params =
:code => "#code",
:redirect_uri => '/auth/exact/callback',
:grant_type => "authorization_code",
:client_id => "CLIENT_ID",
:client_secret => "CLIENT_SECRET"
uri = URI('https://start.exactonline.nl/api/oauth2/token')
#
Net::HTTP::Get.new(uri.request_uri).set_form_data(params)
o para la solicitud posterior del uso de envío de formularios Net::HTTP::Post
y encode_www_form
es:
Genera datos de formulario codificados en URL a partir de una enumeración dada.
URI.encode_www_form([["name", "ruby"], ["language", "en"]])
#=> "name=ruby&language=en"
en tu caso
uri.query = URI.encode_www_form(params)
#=> "code=aas22&redirect_uri=...."
Más info Aquí
Para ponerlo en términos simples, si necesita PUBLICAR una solicitud codificada en formulario de aplicación/www-url:
# prepare the data:
params = [ [ "param1", "value1" ], [ "param2", "value2" ], [ "param3", "value3" ] ]
uri = ( "your_url_goes_here" )
# make your request:
response = Net::HTTP.post_form( uri, params )
if( response.is_a?( Net::HTTPSuccess ) )
# your request was successful
puts "The Response -> #response.body"
else
# your request failed
puts "Didn't succeed :("
end
Si está trabajando con un Net::HTTP
objeto y por lo tanto no puede utilizar el post_form
método de clase, codifique los valores del formulario usted mismo y proporcione el valor codificado como los datos string.
def post_form(path, form_params)
encoded_form = URI.encode_www_form(form_params)
headers = content_type: "application/x-www-form-urlencoded"
http_client.request_post(path, encoded_form, headers)
end
def http_client
http_client = Net::HTTP.new(@host, @port)
http_client.read_timeout = @read_timeout
http_client.use_ssl = true
http_client
end
Esto es lo que Net::HTTP.post_form
hace internamente.
Al final de todo puedes encontrar las interpretaciones de otros creadores, tú además tienes la libertad de insertar el tuyo si dominas el tema.