محول Curl إلى JavaScript

تحويل أوامر curl إلى كود JavaScript - توليد كود JavaScript fetch/axios جاهز للاستخدام لطلبات API

إشعار الخصوصية: توفر هذه الأداة الاحترافية تحويلاً آمناً إلى كود JavaScript مع حماية خصوصية على مستوى المؤسسات. نحن لا نخزن أي بيانات تقدمها، مما يضمن سرية كاملة لعمل تطوير API الخاص بك.

مولد كود JavaScript

// JavaScript code will appear here
// Example:
// Using fetch API
fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'test'
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

أوامر curl الشائعة لاختبار API في JavaScript

فيما يلي بعض أوامر curl الشائعة التي يمكنك تحويلها إلى كود JavaScript:

أمثلة JavaScript Fetch و Axios

يوفر JavaScript طرقاً متعددة لإجراء طلبات HTTP. فيما يلي أنماط شائعة باستخدام كل من واجهة Fetch API و Axios:

تحميل الملفات باستخدام JavaScript Fetch

const formData = new FormData();
formData.append('file', document.querySelector('#fileInput').files[0]);

fetch('https://api.example.com/upload', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_TOKEN_HERE'
  },
  body: formData
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

JavaScript Fetch مع المهلة ومعالجة الأخطاء

const controller = new AbortController();
const signal = controller.signal;

// Set timeout of 5 seconds
const timeoutId = setTimeout(() => controller.abort(), 5000);

fetch('https://api.example.com/data', {
  method: 'GET',
  signal: signal
})
.then(response => {
  if (!response.ok) {
    throw new Error(`HTTP error! Status: ${response.status}`);
  }
  clearTimeout(timeoutId);
  return response.json();
})
.then(data => console.log(data))
.catch(error => {
  if (error.name === 'AbortError') {
    console.error('Request timed out');
  } else {
    console.error('Error:', error);
  }
});

كيفية استخدام محول كود JavaScript

1. الاستخدام الأساسي

انسخ أمر curl الخاص بك → الصقه في مربع الإدخال → احصل على كود JavaScript فوراً

2. تنفيذ معالجة الأخطاء بشكل صحيح

axios.get('https://api.example.com/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    if (error.response) {
      // Server returned an error status code
      console.error(`Server error: ${error.response.status}`);
      console.error(error.response.data);
    } else if (error.request) {
      // Request was made but no response received
      console.error('Network error - no response received');
    } else {
      // Error in request setup
      console.error('Request error:', error.message);
    }
  });

3. استخدام إلغاء الطلب لتحسين تجربة المستخدم

// Using fetch with AbortController
const controller = new AbortController();
const signal = controller.signal;

// Cancel request after 5 seconds
setTimeout(() => controller.abort(), 5000);

fetch('https://api.example.com/data', { signal })
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => {
    if (error.name === 'AbortError') {
      console.log('Request was cancelled');
    } else {
      console.error('Error:', error);
    }
  });

// Using axios with CancelToken
const source = axios.CancelToken.source();

// Cancel request after 5 seconds
setTimeout(() => {
  source.cancel('User cancelled the request');
}, 5000);

axios.get('https://api.example.com/data', {
  cancelToken: source.token
})
.then(response => console.log(response.data))
.catch(error => {
  if (axios.isCancel(error)) {
    console.log('Request cancelled:', error.message);
  } else {
    console.error('Error:', error);
  }
});

الأسئلة الشائعة حول طلبات HTTP في JavaScript

س: كيف تختلف واجهة fetch API في JavaScript عن curl؟

ج: بينما curl هي أداة سطر أوامر لإجراء طلبات HTTP، توفر واجهة fetch API في JavaScript واجهة برمجية داخل متصفحات الويب و Node.js. تستخدم Fetch الوعود (Promises) للتعامل مع العمليات غير المتزامنة، بينما ينفذ curl بشكل متزامن. بالإضافة إلى ذلك، تتبع fetch إعادة التوجيه تلقائياً ولا ترسل ملفات تعريف الارتباط افتراضياً، بينما يقوم curl بكليهما ما لم يتم تكوينه بخلاف ذلك.

س: ما هي الاختلافات الرئيسية بين fetch و axios؟

ج: Fetch مدمجة في المتصفحات الحديثة ولكنها تتطلب المزيد من الكود المتكرر لمعالجة الأخطاء ولا تقوم تلقائياً بتحليل استجابات JSON. Axios هي مكتبة توفر واجهة برمجة أكثر ثراءً بالميزات مع تحليل تلقائي لـ JSON، ومعالجة أفضل للأخطاء، واعتراض الطلب/الاستجابة، وإلغاء الطلب المدمج. يعمل Axios أيضاً بشكل متسق عبر بيئات المتصفحات و Node.js.

س: كيف أتعامل مع مشاكل CORS عند تحويل أوامر curl إلى JavaScript؟

ج: تنطبق قيود CORS (مشاركة الموارد عبر الأصول المتعددة) على JavaScript المستندة إلى المتصفح ولكن ليس على curl. عند تحويل أوامر curl إلى JavaScript، قد تواجه أخطاء CORS إذا لم يتضمن الخادم رؤوس CORS المناسبة. تشمل الحلول: استخدام وكيل CORS، أو طلب من مالك API تمكين رؤوس CORS، أو تنفيذ وكيل من جانب الخادم في تطبيقك، أو استخدام Node.js للطلبات التي لا تعمل في المتصفح.

س: كيف يمكنني محاكاة علامة curl -k/--insecure في JavaScript؟

ج: في JavaScript المستندة إلى المتصفح، لا يمكنك تجاوز التحقق من شهادة TLS لأنها ميزة أمان يفرضها المتصفح. في Node.js، يمكنك تعيين خيار rejectUnauthorized: false في تكوين وكيل HTTPS. ومع ذلك، لا يُنصح بهذا في الإنتاج لأنه يقوض الأمان. مثال: const https = require('https'); const agent = new https.Agent({rejectUnauthorized: false});

س: كيف أتعامل مع تحميلات الملفات المشابهة لعلامة -F في curl في JavaScript؟

ج: للتعامل مع تحميلات الملفات في JavaScript بشكل مشابه لعلامة -F في curl، استخدم واجهة FormData. على سبيل المثال: const formData = new FormData(); formData.append('file', fileInput.files[0]); formData.append('field', 'value'); fetch('https://api.example.com/upload', { method: 'POST', body: formData }); يعمل هذا النهج مع كل من fetch و axios.

س: كيف أضبط مهلات الطلب مثل --connect-timeout في curl في JavaScript؟

ج: مع واجهة fetch API، استخدم AbortController مع setTimeout: const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); fetch(url, { signal: controller.signal }); مع axios، استخدم خيار timeout: axios.get(url, { timeout: 5000 }); يتيح لك كلا النهجين التحكم في مدة الانتظار قبل إلغاء الطلب.

س: كيف أصحح طلبات الشبكة في JavaScript مقارنة بوضع التفصيل في curl؟

ج: بينما يوفر curl علامة -v/--verbose للحصول على معلومات مفصلة عن الطلب/الاستجابة، يوفر JavaScript أدوات تصحيح مختلفة. في المتصفحات، استخدم علامة التبويب Network في DevTools لفحص الطلبات والرؤوس والحمولات والتوقيت. للتصحيح البرمجي، يمكنك استخدام معترضات axios لتسجيل تفاصيل الطلب/الاستجابة أو تنفيذ تسجيل مخصص مع fetch. في Node.js، يمكنك استخدام مكتبات مثل 'http-debug' أو تعيين متغير البيئة NODE_DEBUG=http.

مرجع أوامر Curl لاختبار API في JavaScript

فهم أوامر curl ضروري لاختبار API الفعال مع JavaScript. إليك مرجعاً سريعاً لخيارات curl الشائعة التي يدعمها محولنا:

بناء جملة curl الأساسي

curl [options] [URL]

خيارات curl الشائعة

تحويل أوامر curl المعقدة

يتعامل محول JavaScript لدينا مع أوامر curl المعقدة بما في ذلك الرؤوس المتعددة والمصادقة وحمولات البيانات والخيارات المختلفة. ما عليك سوى لصق أمر curl الخاص بك والحصول على كود JavaScript نظيف وحديث باستخدام إما واجهة Fetch API أو Axios.

أفضل ممارسات HTTP في JavaScript

عند العمل مع واجهة Fetch API أو Axios في JavaScript، اتبع أفضل الممارسات التالية للتفاعلات الفعالة والآمنة مع API:

1. استخدام async/await لقراءة أفضل

// Using async/await with fetch
async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    
    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }
    
    const data = await response.json();
    console.log(data);
    return data;
  } catch (error) {
    console.error('Fetch error:', error);
  }
}

// Using async/await with axios
async function fetchDataWithAxios() {
  try {
    const response = await axios.get('https://api.example.com/data');
    console.log(response.data);
    return response.data;
  } catch (error) {
    console.error('Axios error:', error);
  }
}

2. تنفيذ آلية إعادة محاولة الطلب

async function fetchWithRetry(url, options = {}, retries = 3, backoff = 300) {
  try {
    const response = await fetch(url, options);
    return response;
  } catch (error) {
    if (retries <= 1) throw error;
    
    await new Promise(resolve => setTimeout(resolve, backoff));
    return fetchWithRetry(url, options, retries - 1, backoff * 2);
  }
}

3. إنشاء عملاء API قابلة لإعادة الاستخدام

// Create configurable API client with axios
const apiClient = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
});

// Add request interceptors
apiClient.interceptors.request.use(config => {
  // Do something before request is sent
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
}, error => {
  return Promise.reject(error);
});

// Add response interceptors
apiClient.interceptors.response.use(response => {
  // Any status code within 2xx range
  return response;
}, error => {
  // Handle 401 Unauthorized errors
  if (error.response && error.response.status === 401) {
    console.log('Unauthorized, please login again');
  }
  return Promise.reject(error);
});

// Use the API client
apiClient.get('/users')
  .then(response => console.log(response.data))
  .catch(error => console.error(error));

4. التعامل مع الطلبات المتزامنة

// Using Promise.all with fetch
async function fetchMultipleResources() {
  try {
    const [users, products, orders] = await Promise.all([
      fetch('https://api.example.com/users').then(res => res.json()),
      fetch('https://api.example.com/products').then(res => res.json()),
      fetch('https://api.example.com/orders').then(res => res.json())
    ]);
    
    console.log({ users, products, orders });
    return { users, products, orders };
  } catch (error) {
    console.error('Error fetching data:', error);
  }
}

// Using axios.all for concurrent requests
async function fetchMultipleResourcesWithAxios() {
  try {
    const [users, products, orders] = await axios.all([
      axios.get('https://api.example.com/users'),
      axios.get('https://api.example.com/products'),
      axios.get('https://api.example.com/orders')
    ]);
    
    console.log({
      users: users.data,
      products: products.data,
      orders: orders.data
    });
  } catch (error) {
    console.error('Error fetching data:', error);
  }
}

5. تنفيذ تخزين مؤقت للطلبات

// Simple in-memory cache implementation
const cache = new Map();

async function fetchWithCache(url, options = {}, ttl = 60000) {
  const cacheKey = `${url}-${JSON.stringify(options)}`;
  
  // Check cache
  const cachedItem = cache.get(cacheKey);
  if (cachedItem && Date.now() < cachedItem.expiry) {
    console.log('Using cached data');
    return cachedItem.data;
  }
  
  // If no cache or expired, make the request
  const response = await fetch(url, options);
  const data = await response.json();
  
  // Update cache
  cache.set(cacheKey, {
    data,
    expiry: Date.now() + ttl
  });
  
  return data;
}
" } }, { "@type": "Question", "name": "كيف أحول أمر curl مع تحميل ملف إلى JavaScript؟", "acceptedAnswer": { "@type": "Answer", "text": "لتحميلات الملفات في JavaScript، ستحتاج إلى استخدام واجهة FormData. يتعامل محولنا مع أوامر curl التي تحتوي على خيارات -F أو --form ويولد كود JavaScript المناسب باستخدام إما fetch أو axios." } } ] }