Estoy usando el siguiente código para crear una conexión:
<strong i="6">@connection</strong> = Faraday.new(HOST, ssl: { verify: true }) do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.adapter Faraday.default_adapter
end
Entonces, estoy realizando una publicación de esta manera:
@connection.post do |request|
request.url "#{my_uri.path}?#{my_uri.query}"
request.headers['Content-Type'] = 'application/json'
request.body = my_object.to_json
end
La solicitud funciona bien. El problema es que no veo el cuerpo de la solicitud en los registros, solo la URL de la solicitud.
El registrador no hace cuerpos . Tal vez esta puede ser una característica opcional, pero por defecto no creo que deba hacer cuerpos porque pueden ser bastante grandes e inflarían el registro muy rápidamente.
Creo que hay varios casos de uso en los que querrías registrar todo el cuerpo. Necesito esto también. Sí, los cuerpos pueden ser bastante grandes, pero podemos usar el nivel de registro debug
y dejar que la instancia del registrador pasada controle la verbosidad.
@mtarnovan De acuerdo. Siga la solicitud de extracción a la que se hace referencia para obtener actualizaciones. Es posible que agreguemos la función, pero tendrá que ser opcional y deberá tener algún tipo de protección para evitar volcar cuerpos que no sean de texto sin formato (como respuestas comprimidas o binarias)
:+1: Clave para depuración
Desde que encontré esta página a través de Google: ahora es compatible.
require "logger"
Faraday.new do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), bodies: true
end
También hay configuraciones más detalladas disponibles si las necesita. Vea la solicitud de extracción.
¿Esto no parece funcionar para solicitudes de url_encoded
?
Hola @vemv , el orden de los middlewares es extremadamente importante en Faraday.
¿Puede proporcionar su código de inicialización de conexión e intentar explicar mejor por qué "no parece funcionar para solicitudes de url_encoded
"?
¿Cuál es el resultado que obtienes y cuál es el esperado?
Sé que esto es antiguo, pero ¿a nadie se le ocurrió que el OP está registrando la respuesta: faraday.response :logger
.
@jpickwell usa faraday.response
porque el middleware logger
está registrado como un middleware de respuesta. En realidad, registra tanto las solicitudes como las respuestas 😄
acabo de encontrar esto; por esta línea parece que necesita pasar dos argumentos para ver el cuerpo de la solicitud:
Faraday.new do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), body: true, bodies: { request: true, response: true }
end
(a menos que eso haya cambiado en una confirmación más reciente 🤔)
@davidalpert eso no es necesario, simplemente puede pasar bodies: true
para habilitarlos a ambos, o usar los valores separados como en el ejemplo anterior para tener más control.
Veo que hay una opción body: true
en ese ejemplo, pero desafortunadamente no es una opción válida (¿tal vez se equivocaron en el plural?)
Comentario más útil
Desde que encontré esta página a través de Google: ahora es compatible.
También hay configuraciones más detalladas disponibles si las necesita. Vea la solicitud de extracción.