Saltar al contenido

Cómo usar x-www-form-urlencoded en rieles

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 enctypeeste 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *