Saltar al contenido

¿Cómo hago para que la gema RestClient de Ruby respete el tipo de contenido en la publicación?

Solución:

Es posible que desee poner json como cadena como su carga útil en lugar de hash. Por ejemplo, haz lo siguiente:

RestClient.post 'http://localhost:5001','{"a":"b"}',:content_type => 'application/json'

Si observa payload.rb, muestra que usará la clase Base en lugar de la clase UrlEncoded si la carga útil es una cadena. Pruébelo y vea si funciona para usted.

Hecho:

Para :post solicitud, cuando payload es un Hash, los Content-Type El encabezado siempre se anulará a application/x-www-form-urlencoded.

Reproducible con rest-client (2.0.0).

Solución:

Convierta la carga útil de hash en una cadena json.

require 'json'

payload.to_json

Hay un ticket en el repositorio de rest-client:

Me gustaría agregar que mi problema fue al usar RestClient::Request.execute (Opuesto a RestClient.post o RestClient.get).

El problema estaba en cómo estaba configurando :content_type y :accept. A partir de los ejemplos que vi, sentí que deberían ser opciones de nivel superior como esta:

res = RestClient::Request.execute(
  :method => :get,
  :url => url,
  :verify_ssl =>  false,
  :content_type => :json,
  :accept => :json,
  :headers => { 
    :Authorization => "Bearer #{token}", 
  },
  :payload => '{"a":"b"}'
)

Pero en realidad tienes que ponerlos dentro :headers como esto:

res = RestClient::Request.execute(
  :method => :get,
  :url => url,
  :verify_ssl =>  false,
  :headers => { 
    :Authorization => "Bearer #{token}", 
    :content_type => :json,
    :accept => :json
  },
  :payload => '{"a":"b"}'
)
¡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 *