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"}'
)