YamlBox

الويب والتشفير · 50دقيقة قراءة

cURL للجلب: نقل الطلب من المحطة إلى المتصفح

يعد cURL لجلب التحويل هو المسار المعتاد من وثائق واجهة برمجة التطبيقات (API) إلى كود الواجهة الأمامية العامل: أسرع طريقة لفهم واجهة برمجة التطبيقات (API) هي أمر cURL المنسوخ من مستنداتها، وأسرع طريقة لشحنها هي`fetch`.يكون التحويل بينهما ميكانيكيًا في الغالب - يتم تعيين الأعلام على كائن خيارات - ولكن هناك شيئان يكسران الترجمة بشكل روتيني: ترميزات النص ونموذج أمان المتصفح الذي ليس له مكافئ في الوحدة الطرفية.

تم التحديث

كيف خريطة الأعلام

  • `-X POST` → `method: "POST"` (أو استنتج الطريقة من `-d`).
  • `-H "Content-Type: application/json"` → إدخال في `headers`.
  • `-d '{"a":1}'` → `body: JSON.stringify(...)`; يرسله cURL مشفرًا بالنموذج ما لم تقل خلاف ذلك.
  • `--data-binary @file` → نص `Blob` أو `FormData` أو `ArrayBuffer` بدلاً من سلسلة.
  • `-u user:pass` → رأس `Authorization: Basic …` مبني من القاعدة 64 من `user:pass`.
  • `-F name=@file` → `FormData` مع `File`، وهي الطريقة التي يتم بها التعبير عن تحميلات الملفات.
                await fetch('https://api.example.com/v1/orders', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer ' + token,
  },
  body: JSON.stringify({ sku: 'YB-1', qty: 2 }),
});
              

CORS: الجزء الذي لم يكن على cURL التفكير فيه مطلقًا

يعمل cURL خارج نموذج أمان المتصفح، لذا يمكنه الاتصال بأي مضيف يجيب. `fetch` في الصفحة مرتبط بـ CORS: يجب أن يسمح الخادم بأصلك، وبالنسبة لأي شيء يتجاوز الطلبات البسيطة، يجب عليه أيضًا الإجابة على الاختبار المبدئي `OPTIONS` بشكل صحيح. يمكن أن يفشل الأمر المحول الذي يعمل بشكل مثالي في الوحدة الطرفية في المتصفح بسبب وجود خطأ غير شفاف في الشبكة لهذا السبب بالضبط - ولن يؤدي أي قدر من تحرير الرأس في الطلب إلى إصلاحه، لأن الإذن يجب أن يأتي من الخادم.

إذا فشلت عملية الجلب مع رسالة CORS، فسيتم الإصلاح على API أو على الوكيل الخاص بك - وليس في JavaScript. لا تتغلب أبدًا على هذه المشكلة عن طريق وضع المفتاح "1" في رمز العميل "لتجنب" المشكلة.

بيانات الاعتماد وعمليات إعادة التوجيه والتدفق

يختلف سلوكان آخران عن المحطة. لا يتم إرسال ملفات تعريف الارتباط إلا إذا نجحت`credentials: "include"`، ويجب أن يستجيب الخادم بأصل صريح بدلاً من حرف البدل.تتم متابعة عمليات إعادة التوجيه افتراضيًا بـ`redirect: "follow"`، ولكن إعادة التوجيه تفقد`Authorization`head over Origins ما لم يعالجها الخادم، ولهذا السبب غالبًا ما تحتاج المكالمات المصادق عليها`redirect: "manual"`ومتابعة متعمدة. تتم قراءة الردود المتدفقة من`response.body`ك`ReadableStream`، حيث تتم طباعة cURL ببساطة كما تستقبل.

جلب أو أكسيوس؟

`fetch` مبني ويعمل في كل مكان بشكل حديث؛ يضيف axios الراحة — التحليل التلقائي، والاعتراضات، والخطأ القابل للقراءة للاستجابات غير 2xx، وتقدم التحميل في أوقات التشغيل الأقدم. يعد أمر cURL المحول نقطة بداية موثوقة لأي من الأمرين: الصق الخيارات التي تم إنشاؤها في استدعاء axios وتبقى الرؤوس والنص دون تغيير.

تحويل دون تسرب

عادةً ما تحمل أوامر cURL المنسوخة من الجلسات الحقيقية الرموز المميزة لحاملها المباشر أو مفاتيح API أو ملفات تعريف الارتباط للجلسة. التحويل الذي يتم تشغيله في المتصفح يحتفظ ببيانات الاعتماد هذه على جهازك، وهي الطريقة الوحيدة المعقولة للتعامل مع طلب لم تكتبه بنفسك.

الضفيرة لجلبها — الأسئلة المتداولة

لماذا يفشل طلب الجلب المحول الخاص بي بسبب خطأ CORS؟

لأن المتصفح يفرض سياسة الأصل نفسه ولا يفعل ذلك cURL. يجب أن ترسل واجهة برمجة التطبيقات المناسبة`Access-Control-Allow-Origin`رأس ومعالجة طلبات الاختبار المبدئي. يعد التفويض من خلال الواجهة الخلفية الخاصة بك هو الحل القياسي عندما لا تسمح واجهة برمجة التطبيقات التابعة لجهة خارجية بأصول المتصفح.

كيف يمكنني إرسال بيانات النموذج باستخدام الجلب بدلاً من JSON؟

استخدم أ`FormData`الكائن باعتباره الجسم والسماح للمتصفح بتعيين الحدود متعددة الأجزاء - لا تقم بتعيينها`Content-Type`بنفسك، لأن القيمة تتضمن رمزًا مميزًا للحدود ينشئه المتصفح. يغطي هذا أيضًا تحميلات الملفات من`-F`أعلام.

هل يقوم الجلب بإرسال ملفات تعريف الارتباط بشكل افتراضي؟

لا. تتضمن الطلبات ذات الأصل نفسه ملفات تعريف الارتباط عند تطبيق `credentials: "same-origin"`، ولكن تحتاج المكالمات عبر الأصل إلى `credentials: "include"`، ويجب أن يستجيب الخادم بأصل صريح بدلاً من حرف البدل للسماح بقراءة الاستجابة.

الأدوات المذكورة في هذه التدوينة

تصفح القائمة الكاملة للأدوات 19

المزيد من المقالات للقراءة

60دقيقة قراءة

منسق JSON: جميل ومصغر وصالح بالفعل

منسق JSON يقوم بالطباعة الجميلة والتصغير والتحقق من صحة مواقع الأخطاء الدقيقة - بالإضافة إلى الأخطاء النحوية الخمسة وراء كل خطأ JSON غير صالح تقريبًا.

جميع المشاركات 19 →