مبدل 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

۱. استفاده پایه

دستور curl خود را کپی کنید → در کادر ورودی جایگذاری کنید → فوراً کد JavaScript دریافت کنید

۲. پیاده‌سازی مدیریت خطای مناسب

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);
    }
  });

۳. از لغو درخواست برای تجربه کاربری بهتر استفاده کنید

// 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 از Promise‌ها برای مدیریت عملیات‌های ناهمگام استفاده می‌کند، در حالی که curl به صورت همگام اجرا می‌شود. علاوه بر این، fetch به طور خودکار تغییر مسیرها را دنبال می‌کند و به طور پیش‌فرض کوکی‌ها را ارسال نمی‌کند، در حالی که curl هر دو را انجام می‌دهد مگر اینکه به گونه‌ای دیگر پیکربندی شود.

س: تفاوت‌های کلیدی بین fetch و axios چیست؟

ج: Fetch در مرورگرهای مدرن داخلی است اما به کد بیشتری برای مدیریت خطا نیاز دارد و به طور خودکار پاسخ‌های JSON را تجزیه نمی‌کند. Axios یک کتابخانه است که API غنی‌تری با تجزیه خودکار JSON، مدیریت خطای بهتر، رهگیری درخواست/پاسخ و لغو درخواست داخلی ارائه می‌دهد. Axios همچنین به طور یکنواخت در مرورگرها و محیط‌های Node.js کار می‌کند.

س: چگونه مشکلات CORS را هنگام تبدیل دستورات curl به JavaScript مدیریت کنم؟

ج: محدودیت‌های CORS (اشتراک‌گذاری منابع بین منشأها) برای JavaScript مبتنی بر مرورگر اعمال می‌شود اما برای curl خیر. هنگام تبدیل دستورات curl به JavaScript، ممکن است با خطاهای CORS مواجه شوید اگر سرور هدرهای CORS مناسب را شامل نکند. راه‌حل‌ها شامل: استفاده از پروکسی CORS، درخواست از مالک API برای فعال‌سازی هدرهای CORS، پیاده‌سازی یک پروکسی سمت سرور در برنامه خود، یا استفاده از Node.js برای درخواست‌هایی که در مرورگر اجرا نمی‌شوند.

س: چگونه می‌توانم پرچم -k/--insecure در curl را در JavaScript شبیه‌سازی کنم؟

ج: در JavaScript مبتنی بر مرورگر، نمی‌توانید تأیید گواهی SSL را دور بزنید زیرا این یک ویژگی امنیتی است که توسط مرورگرها اعمال می‌شود. در Node.js، می‌توانید گزینه rejectUnauthorized: false را در پیکربندی عامل HTTPS تنظیم کنید. با این حال، این کار در محیط تولید به شدت توصیه نمی‌شود زیرا امنیت را به خطر می‌اندازد. مثال: const https = require('https'); const agent = new https.Agent({rejectUnauthorized: false});

س: چگونه آپلود فایل مشابه پرچم -F در curl را در JavaScript مدیریت کنم؟

ج: برای مدیریت آپلود فایل در JavaScript مشابه پرچم -F در curl، از API 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 در مقایسه با حالت verbose در 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 کارآمد و امن دنبال کنید:

۱. از 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);
  }
}

۲. مکانیزم تلاش مجدد درخواست را پیاده‌سازی کنید

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);
  }
}

۳. کلاینت‌های 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));

۴. درخواست‌های همزمان را مدیریت کنید

// 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);
  }
}

۵. ذخیره‌سازی درخواست را پیاده‌سازی کنید

// 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، باید از API FormData استفاده کنید. مبدل ما دستورات curl با گزینه‌های -F یا --form را پشتیبانی می‌کند و کد JavaScript مناسب با استفاده از fetch یا axios تولید می‌کند." } } ] }