Faraday: بحاجة إلى مساعدة في تحميل json والملف كبيانات متعددة الأجزاء / النموذج

تم إنشاؤها على ٥ يناير ٢٠٢٠  ·  3تعليقات  ·  مصدر: lostisland/faraday

أدناه هو ما أحتاجه لتحميل

-data-binary $'

------WebKitFormBoundaryInmulX6ait6ZMLdu\r\n
Content-Disposition: form-data; name="message"; filename="blob"\r\n
Content-Type: application/json
{
 "title":"title of the message to be sent",
 "body":"body of the message to be sent",
 "attachedFileName":null,
 "attachedFileName2":null,
 "attachedFileName3":null,
 "recipientIdList":[186554]
}
 ------WebKitFormBoundaryInmulX6ait6ZMLdu--\r\n' --compressed

يرجى ملاحظة أن نوع المحتوى الذي يستقبله الخادم هو multipart/form-data

يبدو الكود الحالي الخاص بي كما يلي:

client = Faraday::Connection.new(url: BASE_URL) do |builder|
    builder.use :cookie_jar
    builder.use :multipart
    builder.use :url_encoded
    builder.adapter :net_http
end

message = {title: "title", body: "body of message", recipientIdList:[186554]}
payload = {message: JSON.dump(message)}

response = @client.post(URL) do |request|
    request.headers['Content-Type'] = 'multipart/form-data'
    request.body = payload
end

ومع ذلك ، فإن الاستجابة التي أحصل عليها من الخادم هي {"success"=>false, "errorCode"=>nil, "message"=>"Content type 'application/octet-stream' not supported", "data"=>nil}

قمت بتعديل الكود شيئًا فشيئًا وحاولت مرة أخرى ، وبحثت في google لساعات ولكن لم أجد حلًا.
سأكون ممتنا للغاية إذا كان شخص ما يمكن أن يساعدني في هذا.
شكرا مقدما

ملاحظة: يبدو أن هذه المشكلة مرتبطة بـ https://github.com/lostisland/faraday/issues/830#issue -372589645 و https://github.com/lostisland/faraday/issues/769#issue -295426091 ، لكني لا يوجد حل .. الرجاء المساعدة ..

التعليق الأكثر فائدة

تكمن المشكلة في الطريقة التي يتم بها إنشاء الحمولة. وفقًا لمقتطف curl -data-binary ، يريد خادمك أن تحتوي قيمة النموذج message application/json على نوع المحتوى $ # $ 2 $ # $. ومع ذلك ، فإن الحمولة المُنشأة لا تحدد ذلك في أي مكان.

إليك كيفية إصلاحه في Faraday v1.0. تعرف على المزيد حول برمجية Multipart Middleware ...

-payload = {message: JSON.dump(message)}
+payload = { message: Faraday::ParamPart.new(JSON.dump(message), ‘application/json’) }

في Faraday v0.1x (تم تأكيده في 0.17.3). لاحظ أن هذا لا يزال يرسل "ملفًا" يتم قراءته فقط من كائن إدخال / إخراج في الذاكرة. نأمل أن لا يهتم الخادم بقيم الترويسة الإضافية متعددة الأجزاء. يمكنك رؤية التفاصيل في الطلب الثالث أسفل هذه الرسالة.

-payload = {message: JSON.dump(message)}
+{ message: Faraday::UploadIO.new(StringIO.new(JSON.dump(message)), 'application/json') }

لا أعرف ماذا أفعل بخصوص رسالة الخطأ التي رد بها الخادم.

نوع المحتوى "application / octet-Stream" غير مدعوم

آمل أن يؤدي إصلاح مشكلة نوع المحتوى متعدد الأجزاء إلى حلها ، حيث لا أرى من أين يأتي application/octet-stream .

اسمحوا لي أن أعرف إذا كان لديك أي أسئلة أخرى!

عرض عملي

يمكنك مشاهدة مقتطفات رمز العمل في multart.rb · جيثب . نظرًا لأن RequestBin الذي يشير إليه الرمز يحتفظ فقط بمعلومات الطلب مؤقتًا ، فأنا أسجل التفاصيل أدناه:

طلب بدون نوع محتوى في الحمولة:

# AMZ/Cloudfront headers removed
Content-Type: multipart/form-data; boundary=—————RubyMultipartPost-10fbc5eb433c89c0eca87785f09ae45d
Connection: close
Connect-Time: 1
X-Request-Id: e802a260-56a9-4d01-a4ee-77f652380185
Content-Length: 253
Host: requestbin.io
User-Agent: Faraday v1.0.0
Accept: */*

——————RubyMultipartPost-10fbc5eb433c89c0eca87785f09ae45d
Content-Disposition: form-data; name=“message”

{“title”:”title”,”body":"body of message”,”recipientIdList":[186554]}
——————RubyMultipartPost-10fbc5eb433c89c0eca87785f09ae45d——————

طلب مع نوع المحتوى (فاراداي 1.0)

Content-Type: multipart/form-data; boundary=—————RubyMultipartPost-9d77ee5700e0658dddb09ac41fad5fa4

Connection: close
Connect-Time: 0
Content-Length: 285
User-Agent: Faraday v1.0.0
X-Request-Id: 2bbb3705-42ec-4de2-877c-2afd588ed679
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept: */*
Host: requestbin.io

——————RubyMultipartPost-9d77ee5700e0658dddb09ac41fad5fa4
Content-Disposition: form-data; name=“message”
Content-Type: application/json

{“title”:”title”,”body":"body of message”,”recipientIdList”:[186554]}
——————RubyMultipartPost-9d77ee5700e0658dddb09ac41fad5fa4——————

طلب مع نوع المحتوى (Faraday v0.17.3)

Content-Type: multipart/form-data; boundary=—————RubyMultipartPost-697c8614200bc0d7ae2fcc0215a2a697
Connection: close
Content-Length: 363
User-Agent: Faraday v0.17.3
X-Request-Id: af65fc06-3914-4ab6-8dbf-b347a1ac498a
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept: */*
Host: requestbin.io

——————RubyMultipartPost-697c8614200bc0d7ae2fcc0215a2a697
Content-Disposition: form-data; name=“message”; filename=“local.path"
Content-Length: 69
Content-Type: application/json
Content-Transfer-Encoding: binary

{“title”:”title”,”body”:”body of message”,”recipientIdList”:[186554]}
——————RubyMultipartPost-697c8614200bc0d7ae2fcc0215a2a697—

ال 3 كومينتر

تكمن المشكلة في الطريقة التي يتم بها إنشاء الحمولة. وفقًا لمقتطف curl -data-binary ، يريد خادمك أن تحتوي قيمة النموذج message application/json على نوع المحتوى $ # $ 2 $ # $. ومع ذلك ، فإن الحمولة المُنشأة لا تحدد ذلك في أي مكان.

إليك كيفية إصلاحه في Faraday v1.0. تعرف على المزيد حول برمجية Multipart Middleware ...

-payload = {message: JSON.dump(message)}
+payload = { message: Faraday::ParamPart.new(JSON.dump(message), ‘application/json’) }

في Faraday v0.1x (تم تأكيده في 0.17.3). لاحظ أن هذا لا يزال يرسل "ملفًا" يتم قراءته فقط من كائن إدخال / إخراج في الذاكرة. نأمل أن لا يهتم الخادم بقيم الترويسة الإضافية متعددة الأجزاء. يمكنك رؤية التفاصيل في الطلب الثالث أسفل هذه الرسالة.

-payload = {message: JSON.dump(message)}
+{ message: Faraday::UploadIO.new(StringIO.new(JSON.dump(message)), 'application/json') }

لا أعرف ماذا أفعل بخصوص رسالة الخطأ التي رد بها الخادم.

نوع المحتوى "application / octet-Stream" غير مدعوم

آمل أن يؤدي إصلاح مشكلة نوع المحتوى متعدد الأجزاء إلى حلها ، حيث لا أرى من أين يأتي application/octet-stream .

اسمحوا لي أن أعرف إذا كان لديك أي أسئلة أخرى!

عرض عملي

يمكنك مشاهدة مقتطفات رمز العمل في multart.rb · جيثب . نظرًا لأن RequestBin الذي يشير إليه الرمز يحتفظ فقط بمعلومات الطلب مؤقتًا ، فأنا أسجل التفاصيل أدناه:

طلب بدون نوع محتوى في الحمولة:

# AMZ/Cloudfront headers removed
Content-Type: multipart/form-data; boundary=—————RubyMultipartPost-10fbc5eb433c89c0eca87785f09ae45d
Connection: close
Connect-Time: 1
X-Request-Id: e802a260-56a9-4d01-a4ee-77f652380185
Content-Length: 253
Host: requestbin.io
User-Agent: Faraday v1.0.0
Accept: */*

——————RubyMultipartPost-10fbc5eb433c89c0eca87785f09ae45d
Content-Disposition: form-data; name=“message”

{“title”:”title”,”body":"body of message”,”recipientIdList":[186554]}
——————RubyMultipartPost-10fbc5eb433c89c0eca87785f09ae45d——————

طلب مع نوع المحتوى (فاراداي 1.0)

Content-Type: multipart/form-data; boundary=—————RubyMultipartPost-9d77ee5700e0658dddb09ac41fad5fa4

Connection: close
Connect-Time: 0
Content-Length: 285
User-Agent: Faraday v1.0.0
X-Request-Id: 2bbb3705-42ec-4de2-877c-2afd588ed679
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept: */*
Host: requestbin.io

——————RubyMultipartPost-9d77ee5700e0658dddb09ac41fad5fa4
Content-Disposition: form-data; name=“message”
Content-Type: application/json

{“title”:”title”,”body":"body of message”,”recipientIdList”:[186554]}
——————RubyMultipartPost-9d77ee5700e0658dddb09ac41fad5fa4——————

طلب مع نوع المحتوى (Faraday v0.17.3)

Content-Type: multipart/form-data; boundary=—————RubyMultipartPost-697c8614200bc0d7ae2fcc0215a2a697
Connection: close
Content-Length: 363
User-Agent: Faraday v0.17.3
X-Request-Id: af65fc06-3914-4ab6-8dbf-b347a1ac498a
Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept: */*
Host: requestbin.io

——————RubyMultipartPost-697c8614200bc0d7ae2fcc0215a2a697
Content-Disposition: form-data; name=“message”; filename=“local.path"
Content-Length: 69
Content-Type: application/json
Content-Transfer-Encoding: binary

{“title”:”title”,”body”:”body of message”,”recipientIdList”:[186554]}
——————RubyMultipartPost-697c8614200bc0d7ae2fcc0215a2a697—

شكرًا جزيلاً على مساعدتك ، technoweenie ! انت رائع!!
يعمل الطلب الآن بشكل جيد مع الحمولة التي تم إنشاؤها حديثًا ، ولم يعد يشكو من application/octet-stream بعد الآن.
أتمنى أن تحظى بيوم رائع: د

سعيد لسماع أنه يعمل كما هو متوقع الآن!
أحسنت echnoweenie ، شكرًا لمعالجة هذه المشكلة الصعبة بسرعة 👏!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

yusefu picture yusefu  ·  3تعليقات

jedeleh picture jedeleh  ·  3تعليقات

mokolabs picture mokolabs  ·  3تعليقات

jeffb-stell picture jeffb-stell  ·  5تعليقات

olleolleolle picture olleolleolle  ·  5تعليقات