Faraday: Faraday n'enregistre pas le corps de la requête POST

Créé le 9 avr. 2013  ·  11Commentaires  ·  Source: lostisland/faraday

J'utilise le code suivant pour créer une connexion :

<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

Ensuite, j'effectue un post de cette manière:

@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 demande fonctionne bien. Le problème est que je ne vois pas le corps de la requête dans les journaux, seulement l'URL de la requête.

Commentaire le plus utile

Depuis que j'ai trouvé cette page via Google : c'est maintenant supporté.

require "logger"

Faraday.new do |faraday|
  faraday.response :logger, ::Logger.new(STDOUT), bodies: true
end

Des paramètres plus précis sont également disponibles si vous en avez besoin. Voir la demande de tirage.

Tous les 11 commentaires

Le bûcheron ne fait pas de corps . Peut-être que cela peut être une fonctionnalité facultative, mais par défaut, je ne pense pas que cela devrait jamais faire des corps car ils peuvent être assez gros et gonfleraient le journal très rapidement.

Je pense qu'il existe plusieurs cas d'utilisation où vous voudriez enregistrer le corps entier. J'ai besoin de ça aussi. Oui, les corps peuvent être assez gros, mais nous pouvons utiliser le niveau de journalisation debug et laisser l'instance de journalisation transmise contrôler la verbosité.

@mtarnovan D'accord. Suivez la demande d'extraction référencée pour les mises à jour. Nous pourrions ajouter la fonctionnalité, mais elle devra être facultative, et elle devra avoir une sorte de garde pour éviter de vider des corps non en texte clair (tels que des réponses compressées ou binaires)

:+1: Clé pour le débogage

Depuis que j'ai trouvé cette page via Google : c'est maintenant supporté.

require "logger"

Faraday.new do |faraday|
  faraday.response :logger, ::Logger.new(STDOUT), bodies: true
end

Des paramètres plus précis sont également disponibles si vous en avez besoin. Voir la demande de tirage.

Cela ne semble pas fonctionner pour les requêtes url_encoded ?

Salut @vemv , l'ordre des middlewares est extrêmement important à Faraday.
Pouvez-vous s'il vous plaît fournir votre code d'initialisation de connexion et essayer de mieux expliquer pourquoi cela "ne semble pas fonctionner pour les demandes url_encoded " ?
Quelle est la sortie que vous obtenez et quelle est celle attendue?

Je sais que c'est ancien, mais personne n'est venu à l'idée que l'OP enregistre la réponse : faraday.response :logger .

@jpickwell, vous utilisez faraday.response car le middleware logger est enregistré en tant que middleware de réponse. En réalité, il enregistre à la fois les demandes et les réponses 😄

je viens de tomber sur ça; par cette ligne, il semble que vous deviez passer deux arguments pour voir le corps de la requête :

Faraday.new do |faraday|
  faraday.response :logger, ::Logger.new(STDOUT), body: true, bodies: { request: true, response: true }
end

(sauf si cela a changé dans un commit plus récent 🤔 )

@davidalpert ce n'est pas nécessaire, vous pouvez simplement passer le bodies: true pour les activer tous les deux, ou utiliser les valeurs séparées comme dans l'exemple ci-dessus pour avoir plus de contrôle.
Je vois qu'il y a une option body: true dans cet exemple, mais ce n'est malheureusement pas une option valide (peut-être qu'ils se sont trompés de pluriel ?)

Cette page vous a été utile?
0 / 5 - 0 notes