أنا أستخدم الكود التالي لإنشاء اتصال:
<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 ، ترتيب البرامج الوسيطة مهم للغاية في فاراداي.
هل يمكنك تقديم رمز التهيئة الخاص بك من فضلك ومحاولة توضيح سبب "عدم نجاحه على ما يبدو مع طلبات 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: هذا مدعوم الآن.
هناك أيضًا المزيد من الإعدادات الدقيقة المتاحة إذا كنت بحاجة إليها. انظر طلب السحب.