টুল
গাইড

curl কনভার্টার

ডেভ

একটি curl কমান্ডকে fetch, axios, Python, Go, Java এবং HTTPie-এ রূপান্তর করুন — লাইভ, বহুভাষিক ট্যাব সহ।

100% ক্লায়েন্ট-সাইড কোনো ব্যাকএন্ড নেই

দূরবর্তী URL আনা হয় না; আপনার JSON সরাসরি পেস্ট করুন।

ইনপুট
রূপান্তরিত কোড দেখতে একটি curl কমান্ড পেস্ট করুন।
এই পৃষ্ঠায়

curl কনভার্টার কী?#

curl হলো HTTP-এর কাছে সবচেয়ে কাছের একটি সর্বজনীন ভাষা। প্রতিটি ব্রাউজার DevTools প্যানেল, প্রতিটি API ডক্স সাইট, এবং প্রতিটি সাপোর্ট টিকিট শেষ পর্যন্ত আপনাকে একটি curl কমান্ড হাতে দেয় — “copy as cURL” হলো কীভাবে একটি অনুরোধ একটি ব্রাউজার থেকে একটি বাগ রিপোর্টে ভ্রমণ করে। সমস্যাটি হলো পেস্ট করা একটি curl কমান্ড কদাচিৎ এমন কিছু যা আপনি আপনার কোডবেসে সত্যিই চালাতে পারেন। আপনার পরিষেবা Python-এ লেখা, বা Go-তে, বা ব্রাউজার-সাইডের fetch-এ; আপনি curl-এ shell করতে চান না, আপনি আপনি যে HTTP ক্লায়েন্ট ইতিমধ্যে ব্যবহার করেন সেটিতে সমতুল্য কল চান।

এই পৃষ্ঠাটি সেই ফাঁক সংযোগ করে। বাম দিকে একটি curl কমান্ড পেস্ট করুন, এবং এটি shell সিনট্যাক্সকে পার্স করে — পতাকা, উদ্ধৃতি, লাইন কন্টিনিউয়েশন, হেডার, বডি, auth — একটি কাঠামোগত অনুরোধে, তারপর একসাথে ছয়টি টার্গেটের জন্য সমতুল্য কোড নির্গত করে: ব্রাউজার fetch, axios, Python requests, Go net/http, Java HttpURLConnection, এবং httpie। আপনি ট্যাব জুড়ে পড়েন, আপনার স্ট্যাকের সাথে মেলে এমনটি কপি করেন, এবং এগিয়ে যান।

পার্সিং সম্পূর্ণ আপনার ব্রাউজারে চলে। আপনি যে কমান্ড পেস্ট করেন তা কখনো একটি সার্ভার স্পর্শ করে না, যা গুরুত্বপূর্ণ কারণ প্রকৃত curl কমান্ডগুলো প্রায়শই bearer টোকেন, basic-auth প্রমাণপত্রাদি, বা স্বাক্ষরিত কুকিজ ধারণ করে।

কীভাবে ব্যবহার করবেন#

  1. আপনার curl কমান্ড বাম দিকের ইনপুট পেনে পেস্ট করুন। আপনি শীর্ষস্থ curl শব্দটি পেস্ট করতে পারেন বা বাদ দিতে পারেন; উভয়ই কাজ করে। একটি শেষের \ দিয়ে যুক্ত মাল্টি-লাইন কমান্ড বোঝা যায়, যেমন একটি টার্মিনাল থেকে সরাসরি কপি করা কমান্ড যেখানে প্রতিটি পতাকা তার নিজের লাইনে বসে।
  2. আপনি যদি প্রথমে আকৃতিটি দেখতে চান তবে একটি বাস্তবসম্মত উদাহরণ লোড করতে নমুনা ক্লিক করুন, বা পেন মুছতে মুছুন।
  3. আউটপুটের উপরের ট্যাব বার থেকে একটি টার্গেট ভাষা বাছুন: fetch, axios, python, go, java, বা httpie। সব ছয়টি একই পার্স থেকে তৈরি করা হয়, তাই ট্যাব পরিবর্তন তাৎক্ষণিক — কোনো পুনরায় চালানো নেই।
  4. প্যানেলে তৈরি করা কোডটি পড়ুন। এটি ধরতে ট্যাব বারে কপি ব্যবহার করুন।
  5. পেনগুলোর নিচের স্ট্যাটাস বার লক্ষ্য করুন। পার্সার যদি এমন একটি পতাকায় ধাক্কা খায় যা এটি মডেল করে না (একটি আউটপুট-ফাইল রিডাইরেক্ট, একটি প্রক্সি সেটিং), এটি নীরবে ফেলে দেওয়ার বদলে স্পষ্টভাবে তা বলে।

প্রধান বৈশিষ্ট্য#

  • একটি প্রকৃত shell টোকেনাইজার, একটি রেগেক্স স্ক্র্যাপ নয়। একক উদ্ধৃতি, দ্বৈত উদ্ধৃতি, ANSI-C $'...' কোটিং (\n, \t, \x41, é এস্কেপ সহ), ব্যাকস্ল্যাশ-নতুনলাইন লাইন কন্টিনিউয়েশন, এবং "a\b" এবং 'a\b'-এর মধ্যে পার্থক্য সব bash যেভাবে করবে সেভাবে পরিচালিত হয়। সাদাসিধেতে বিভক্ত সরল কনভার্টারগুলো একটি হেডার মানে একটি স্পেস থাকার সাথে সাথে ভেঙে পড়ে।
  • এক পার্স থেকে ছয়টি টার্গেট। আপনি fetch, axios, Python, Go, Java, এবং httpie পাশাপাশি দেখেন। আপনি যদি নিশ্চিত না হন যে fetch নাকি axios-এর জন্য পৌঁছাবেন, আপনি দুটি ক্লিকে একই auth হেডারের পরিচালনা তুলনা করতে পারেন।
  • বডি বুদ্ধিমত্তা। যখন অনুরোধে Content-Type: application/json বহন করে, Python এমিটার এটিকে json= কীওয়ার্ড হিসেবে পাস করে যাতে একটি dict-আকৃতির বডি সঠিকভাবে পাঠানো হয়; অন্যথায় এটি data=-এ ফিরে যায়।
  • Basic auth একবার ডিকোড করা হয়। একটি -u user:pass পতাকা fetch-এ btoa("user:pass") হয়ে যায়, axios-এ auth ব্লক, requests-এ auth= টিপল, এবং Go-তে SetBasicAuth — প্রতিটি ইডিয়ম যেভাবে সেই ভাষা আশা করে।
  • অজানা পতাকাগুলো গিলে ফেলা হয় না, রিপোর্ট করা হয়। -o output.txt বা --proxy স্ট্যাটাস বারে unknown args হিসেবে প্রকাশ করা হয়, তাই আপনাকে কখনো নীরবে বিভ্রান্ত করা হয় না ভেবে একটি রূপান্তর একটি রিডাইরেক্ট বা প্রক্সি ধরেছে যা এটি আসলে ফেলে দিয়েছে।
  • কোনো ব্যাকএন্ড নেই, কোনো লিকেজ নেই। কমান্ডটি পৃষ্ঠার নিজস্ব স্ক্রিপ্ট দ্বারা ইন-মেমরিতে টোকেনাইজ করা হয়। আপনার পেস্ট করা টোকেনকে কোথাও বহন করে নেওয়ার কোনো নেটওয়ার্ক কল নেই।

ব্যবহারের উদাহরণ#

নমুনা লোড করুন (বা একটি JSON POST-এর জন্য আপনি “Copy as cURL” করলে ব্রাউজার DevTools যা তৈরি করে তার সমতুলী পেস্ট করুন):

curl -X POST https://example.com/api/v1/users \
  -H 'Authorization: Bearer tok' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Alice","role":"admin"}'

fetch ট্যাবে পরিবর্তন করুন এবং আপনি পান:

const response = await fetch("https://example.com/api/v1/users", {
  method: "POST",
  headers: {
    "Authorization": "Bearer tok",
    "Content-Type": "application/json",
  },
  body: "{\"name\":\"Alice\",\"role\":\"admin\"}",
});

python ট্যাবে পরিবর্তন করুন। যেহেতু Content-Type JSON, বডিটি json= কীওয়ার্ডের মাধ্যমে যায়:

import requests

url = 'https://example.com/api/v1/users'
headers = {
    'Authorization': 'Bearer tok',
    'Content-Type': 'application/json',
}
payload = '{"name":"Alice","role":"admin"}'
response = requests.request('POST', url, headers=headers, json=payload)
print(response.status_code)

একই কমান্ড অবিলম্বে go, java, axios, এবং httpie ট্যাবের অধীনেও উপলব্ধ — এক পেস্টের বিনিময়ে ছয়টি রূপান্তর।

প্রশ্নোত্তর#

এটি আমার কমান্ডের জন্য “unknown args” বলছে। এটি কী এড়িয়ে গেল?#

পার্সারটি একটি অনুরোধ বর্ণনা করতে আপনি যে curl পতাকাগুলো ব্যবহার করেন সেগুলো মডেল করে — method, URL, headers, body, basic auth, --compressed, -k, -L। যে পতাকাগুলো curl-এর নিজস্ব আচরণ বর্ণনা করে (যেমন বডিটি একটি ফাইলে লেখার জন্য -o, --proxy, --connect-timeout, --cert) অনুবাদ করা হয় না, কারণ একটি fetch কলে তাদের কোনো সমতুলী নেই। সেগুলো সংগ্রহ করা হয় এবং স্ট্যাটাস বারে দেখানো হয় যাতে আপনি জানেন সেগুলো ইচ্ছাকৃতভাবে ফেলে দেওয়া হয়েছে, হারানো নয়।

আমি কি $'...' ANSI-C কোটিং ব্যবহার করে এমন একটি কমান্ড রূপান্তর করতে পারি?#

হ্যাঁ। টার্মিনাল থেকে কপি করা হেডার এবং বডিগুলো কখনো কখনো $'...' দিয়ে মোড়ানো আসে যাতে \n বা \t-এর মতো এস্কেপ সিকোয়েন্সগুলো shell দ্বারা ব্যাখ্যা করা হয়। টোকেনাইজার ANSI-C কোটিং বোঝে এবং \n, \t, \xHH, \uHHHH, \UHHHHHHHH এবং সরল এস্কেপগুলো ডিকোড করে, তাই কনভার্টার যে বাইটগুলো দেখে তা curl যা পাঠাত তার সাথে মেলে।

আমার Python আউটপুট কেন কখনো json= এবং কখনো data= ব্যবহার করে?#

এমিটারটি আপনার হেডারগুলো দেখে। যখন Content-Type: application/json উপস্থিত থাকে এটি বডিটিকে json= কীওয়ার্ডের মাধ্যমে পাস করে, যা requests-কে হেডার সেট করতে এবং পেলোড সঠিকভাবে এনকোড করতে দেয়। অন্য যেকোনো কন্টেন্ট টাইপের জন্য (ফর্ম-এনকোডেড, সরল টেক্সট, মাল্টিপার্ট) এটি data=-এ ফিরে যায়, কারণ সেখানে json= জোর করলে ভুল হবে।

এটি কি আমার জন্য অনুরোধ পাঠায়?#

না, এবং সেটি ইচ্ছাকৃত। এই টুলটি কেবল কমান্ডটিকে কোডে অনুবাদ করে; এটি কখনো এটি সম্পাদন করে না। তৈরি করা স্নিপেট আপনার নিজের প্রোগ্রামে, আপনার নিজের প্রমাণপত্রাদিতে চলে, যেখানে আপনি এটি লাইভ কিছু করার আগে পরিদর্শন করতে পারেন।