Я использую следующий код для создания соединения:
<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
Затем я выполняю сообщение следующим образом:
@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
Запрос работает нормально. Проблема в том, что я не вижу тела запроса в журналах, только URL-адрес запроса.
Регистратор не делает тел . Возможно, это необязательная функция, но по умолчанию я не думаю, что она когда-либо должна делать тела, потому что они могут быть довольно большими и очень быстро раздуют журнал.
Я думаю, что есть несколько вариантов использования, когда вы хотели бы зарегистрировать все тело. Мне это тоже нужно. Да, тела могут быть довольно большими, но мы можем использовать уровень журнала debug
и позволить переданному экземпляру регистратора управлять подробностью.
@mtarnovan Согласен. Следуйте указанному запросу на вытягивание обновлений. Мы можем добавить эту функцию, но она должна быть включена, и у нее должна быть какая-то защита, чтобы избежать дампа тел, отличных от открытого текста (таких как сжатые или двоичные ответы).
:+1: Ключ для отладки
Поскольку я нашел эту страницу через Google: теперь это поддерживается.
require "logger"
Faraday.new do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), bodies: true
end
Есть также более тонкие настройки, если они вам нужны. См. запрос на вытягивание.
Кажется, это не работает для запросов url_encoded
?
Привет @vemv , порядок промежуточного программного обеспечения чрезвычайно важен в Faraday.
Не могли бы вы предоставить свой код инициализации подключения и попытаться лучше объяснить, почему он «не работает для запросов url_encoded
»?
Каков результат, который вы получаете, и каков ожидаемый результат?
Я знаю, что это старо, но никому не приходило в голову, что OP регистрирует ответ: faraday.response :logger
.
@jpickwell, вы используете faraday.response
потому что промежуточное программное обеспечение logger
зарегистрировано как промежуточное программное обеспечение ответа. На самом деле он регистрирует как запросы, так и ответы 😄
только что наткнулся на это; по этой строке кажется, что вам нужно передать два аргумента, чтобы увидеть тело запроса:
Faraday.new do |faraday|
faraday.response :logger, ::Logger.new(STDOUT), body: true, bodies: { request: true, response: true }
end
(если это не изменилось в более позднем коммите 🤔)
@davidalpert в этом нет необходимости, вы можете просто передать bodies: true
чтобы включить их оба, или использовать отдельные значения, как в приведенном выше примере, чтобы иметь больше контроля.
Я вижу, что в этом примере есть вариант body: true
, но, к сожалению, это недопустимый вариант (может быть, они ошиблись во множественном числе?)
Самый полезный комментарий
Поскольку я нашел эту страницу через Google: теперь это поддерживается.
Есть также более тонкие настройки, если они вам нужны. См. запрос на вытягивание.