যদি আপনি কিছুকাল ধরে লিনাক্স অ্যাপ্লিকেশনের টার্মিনাল-ভিত্তিক ইনস্টলেশন নির্দেশিকা অনুসরণ করে আসেন, তবে আপনি নিশ্চিতই curl কমান্ডটির সাথে পরিচিত। cURL হলো URL-এর মাধ্যমে ডেটা ট্রান্সফার করার একটি কমান্ড-লাইন টুল। এর সবচেয়ে সহজ ব্যবহার হলো কমান্ড লাইন থেকে ফাইল ডাউনলোড করা। কিন্তু এটি প্রতibandha, কারণ cURL একটি অবিশ্বাস্য শক্তিশালী টুল যা এর চেয়ে অনেক বেশি কাজ করতে পারে।
cURL কী?
ড্যানিয়েল স্টেনবার্গ (Daniel Stenberg) ১৯৯৬ সালে ওয়েব সার্ভার থেকে আর্থিক ডেটা সংগ্রহ করে IRC চ্যানেলে ব্রডকাস্ট করার জন্য cURL লিখেছিলেন। তখন থেকে এটি ব্রাউজার ছাড়াই ডেটা পাওয়ার একটি শক্তিশালী টুল হয়ে উঠেছে। আপনি যদি সবসময় টার্মিনাল ব্যবহার করেন, তবে এটি আপনার আর্ষনালের সবচেয়ে গুরুত্বপূর্ণ টুলগুলির একটি হবে।
বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশনে cURL প্রি-ইনস্টলড থাকে, তাই আপনি তা सीधে ব্যবহার করতে পারেন। যদি ইনস্টলড না থাকে, তবে অধিকাংশ রিপোজিটরিতে এটি পাওয়া যায়, সফ্টওয়্যার সেন্টার থেকে সহজে ইনস্টল করা যায়।
উইন্ডোজে "curl-সদৃশ" কোনো কমান্ড নেই, আর macOS-এ cURL প্রি-ইনস্টলড থাকে কিন্তু লিনাক্স ভার্সনের মতো অনেক ফ্ল্যাগ (flag) অফার করে না।
ইনস্টলেশন
আগে নিশ্চিত হোন যে cURL আপনার সিস্টেমে ইতিমধ্যে ইনস্টলড আছে।
লিনাক্স
- ডেবিয়ান/উবুন্টু-ভিত্তিক:
sudo apt install curl - আর্চ-ভিত্তিক:
sudo pacman -S curl - ফেডোরা/সেন্টওএস/RHEL:
sudo dnf install curl
macOS
macOS-এ এটি প্রি-ইনস্টলড থাকে, তাই কিছু করার দরকার নেই।
উইন্ডোজ
- উইন্ডোজ ৭/১০/১১-এর জন্য cURL ডাউনলোড পেজ-এ যান এবং আপনার আর্কিটেকচার অনুযায়ী ৬৪-বিট বা ৩২-বিট প্যাকেজ বেছে নিন। আর্কিটেকচার না জানলে ৬৪-বিট নিরাপদ, কারণ ২০০৬-এর পর প্রায় সকল হার্ডওয়্যার ৬৪-বিট।
- সিস্টেম ড্রাইভে বা "C:\Program Files\"-এ "cURL" নামের একটি ফোল্ডার তৈরি করুন।
- ডাউনলোড করা ZIP ফাইল খুলুন, "bin" ফোল্ডারের ভিতর থেকে "curl.exe" কপি করে আপনার তৈরি করা cURL ফোল্ডারে পেস্ট করুন। এই EXE ফাইলটি সম্পূর্ণ স্বয়ংসম্পূর্ণ এবং লিনাক্সে চালানোর মতো সব পারমুটেশন চালাতে পারে।
- এই কমান্ডটি যেকোনো জায়গা থেকে কমান্ড প্রম্পটে চালাতে PATH ভেরিয়েবলে যোগ করতে হবে।
- স্টার্ট মেনুতে
environmentলিখে এন্টার চাপুন। - "Environment Variables..."-এ ক্লিক করুন।
- "Path" এনভায়রনমেন্ট ভেরিয়েবল সিলেক্ট করে "Edit..." ক্লিক করুন।
- "New"-এ ক্লিক করে আপনার "curl.exe"-এর লোকেশন টাইপ করুন (যেমন: "C:\Program Files\cURL")।
- সকল ডায়লগে "OK" ক্লিক করুন। এখন আপনার টার্মিনালে cURL উপলব্ধ!)
মনে রাখবেন: কমান্ড প্রম্পটকে উইন্ডোজ টার্মিনাল (Windows Terminal) বুঝবেন না। উইন্ডোজ টার্মিনাল তার নিজস্ব cURL ভার্সন PowerShell-এ নিয়ে আসে যা কাজ ভালো করে কিন্তু পূর্ণ ভিন্নভাবে।
cURL ব্যবহার শুরু করা
টার্মিনালে curl maketecheasier.com লিখে এন্টার চাপুন।
আউটপুট না পেলে বুঝবেন এই সাইটের সার্ভার non-www ডোমেনে র্যান্ডম কানেকশন রিকোয়েস্টে রেসপন্স দিতে কনফিগারড নয়। সার্ভার অস্তিত্ব নেই বা অনলাইন নেই হলে "could not resolve host" এরর দেখাবে।
কোনো উপকারে আসতে HTTPS প্রোটোকোল স্পেসিফাই করুন: curl https://www.maketecheasier.com।
সফল হলে ডেটার ভয়ানক সাঁকাব_HEAP দেখবেন। ব্যবহারযোগ্য बनाने HTML ফাইলে সেভ করুন:
curl https://www.maketecheasier.com > ~/Downloads/mte.html
Downloads ফোল্ডারে जाकर mte.html ডাবল-ক্লিক করুন — সাইটের হোমপেজের HTML স্ন্যাপশট খুলবে।
-o ফ্ল্যাগ দিয়েও একই কাজ করা যায়:
curl -o ~/Downloads/mte.html https://www.maketecheasier.com
রিডায়রেক্ট ফলো করা (-L ফ্ল্যাগ)
অधিকাংশ সাইট HTTP-কে HTTPS-এ রিডায়রেক্ট করে। cURL-এ -L ফ্ল্যাগ দিয়ে এটি করা যায়। এটি ৩০১ রিডায়রেক্ট ফলো করে পঠনযোগ্য পেজ/ফাইল পর্যন্ত যায়।
curl -L https://google.com
ডাউনলোড রিজিউম করা (-C ফ্ল্যাগ)
বড় ফাইল ডাউনলোড করার সময় ইন্টারনেট ব্যাঘাত হলে নিরাশ হয়। cURL-র -C ফ্ল্যাগ এই সমস্যা সমাধান করে।
উদাহরণস্বরূপ, ডেবিয়ান টেস্টিং ISO ডাউনলোডের মাঝপথে Ctrl+C দিয়ে বন্ধ করলাম।
এখন -C - ফ্ল্যাগ দিয়ে রিজিউম করুন:
curl -C - -o ~/Downloads/debiantesting.iso -L https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-dvd/debian-testing-amd64-DVD-1.iso
ডাউনলোড সফলভাবে আটকে থাকা জায়গা থেকে শুরু হল।
একাধিক ফাইল ডাউনলোড করা
cURL-এ একাধিক ফাইল ডাউনলোড করার सहজ পদ্ধতি নেই, দুটি মেথড আছে:
মেথড ১ (এনামারেটেড ফাইল): ফাইলনেমে নম্বর থাকলে (file1, file2...) ব্র্যাকেট এবং -o ফ্ল্যাগে "#" ব্যবহার করুন:
curl "https://example.com/file[1-5].zip" -o "#1_#2"
মেথড ২ (--remote-name / -O): এটি রিমোট ফাইলনেমেই লোকাল ফাইল তৈরি করে। আউটপুট স্পেসিফাই করার দরকার নেই, তাই টার্মিনাল যেই ডিরেক্টরিতে খোলা আছে সেখানে ডাউনলোড হবে।
curl -O "https://example.com/file1.zip" -O "https://example.com/file2.zip"
অনেক এনামারেটেড ফাইলের জন্য --remote-name-all ভালো:
curl --remote-name-all "https://example.com/file[1-5].zip"
নন-এনামারেটেড ফাইলও একই সাইট থেকে ডাউনলোড করতে পারেন:
curl --remote-name-all "https://example.com/{file1.zip,anotherfile.zip,thisisfun.zip}"
অথেন্টিকেশন দিয়ে ডাউনলোড (-u ফ্ল্যাগ)
প্রাইভেট FTP সার্ভার থেকে ডাউনলোডের মতো অথেন্টিকেশন দরকার পড়লে -u ফ্ল্যাগ ব্যবহার করুন। ফরম্যাট: username:password।
curl -u username:password -o ~/Downloads/file.zip ftp://example.com/file.zip
এটি FTP-এ অথেন্টিকেট করে ফাইলটি ডাউনলোড করবে।
ফাইল ভাগ করা এবং জোড়া করা (--range ফ্ল্যাগ)
বড় ফাইল চানকে ভাগ করে ডাউনলোড করতে --range ফ্ল্যাগ ব্যবহার করুন। বাইট রেঞ্জ স্পেসিফাই করতে হবে (শুরু-শেষ)। শেষ বাইট না দিলে ফাইল শেষ পর্যন্ত ডাউনলোড হবে।
নিচের কমান্ড আর্চ লিনাক্স ISO-এর প্রথম ১০০ MB ডাউনলোড করবে:
curl --range 0-99999999 -o arch.part1 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso
পরবর্তী ১০০ MB-এর জন্য --range 100000000-199999999, ইত্যাদি। && অপারেন্ড দিয়ে চেইন করুন:
curl --range 0-99999999 -o arch.part1 -L&& \ curl --range 100000000-199999999 -o arch.part2 -L && \ curl --range 200000000-299999999 -o arch.part3 -L && \ curl --range 300000000-399999999 -o arch.part4 -L && \ curl --range 400000000-499999999 -o arch.part5 -L && \ curl --range 500000000-599999999 -o arch.part6 -L && \ curl --range 600000000-699999999 -o arch.part7 -L && \ curl --range 700000000- -o arch.part8 -L
ফাইলগুলো জোড়া করা:
- লিনাক্স/ম্যাক:
cat arch.part? > arch.iso - উইন্ডোজ:
copy /b arch.part* arch.iso
অন্যান্য কার্যকর ফিচারস
-#— প্রগ্রেসবার দেখায়। উদাহরণ:curl -# https://asite.com/somefile.zip > ~/somefile.zip-a— ফাইল ওভাররাইট না করে অ্যাপেন্ড করে। উদাহরণ:curl -ao ~/collab-full.x https://example-url.com/collab-part26.x--head— শুধু রেসপন্স হেডার বের করে (ডিবাগিংয়ের জন্য উপযোগী)। উদাহরণ:curl --head https://example-url.com--limit-rate— ব্যান্ডউইথ লিমিট করে। K=KB/s, M=MB/s। উদাহরণ:curl --limit-rate 8M https://example-url.com/file.zip > ~/file.zip-o— আউটপুট ফাইল নির্ধারণ করে। উদাহরণ:curl -o ~/Downloads/file.zip https://thefileplace.com/file.zip -o file2.zip https://thefileplace.com/file2.zip--proxy— প্রক্সি ব্যবহার করতে। উদাহরণ:curl --proxy proxyurl:port https://example-url.com/file.zip > ~file.zip
cURL বনাম Wget
দ দুটোই ১৯৯৬ সালে রিলিজ হয়েছিল। দূর থেকে দেখলে এদের মনে হবে জुड़বা প্রোগ্রাম। কিন্তু গভীরে যেতে ভিন্ন উদ্দেশ্য পাবেন।
Wget
- ইন্টারনেট থেকে ডেটা গ্রাব করার জন্য যাবতীয়ভাবে তৈরি।
- cURL-এর মতো
-Lবা-oফ্ল্যাগ লাগে না; শুধুwget [url]দিলেই চলে। -rফ্ল্যাগ দিয়ে রিকার্সিভলি পুরো ডিরেক্টরি গ্রাব করতে পারে।- দৈনন্দিন সিসাডমিন কাজের সব ফাংশন আছে।
- (লিনাক্সে) কম ডিপেনডেন্সি, সব বক্সের সাথে আসে।
cURL
- রিমোট রিট্রিভালের জন্য বিশাল ফ্ল্যাগ ও ফাংশন সংগ্রহ।
- লোকাল নেটওয়ার্কিং (LDAP) এবং নেটওয়ার্ক প্রিন্টার (Samba) সাপোর্ট করে।
- gzip কমপ্রেশন লাইব্রেরির সাথে ভালো কাজ করে।
- libcurl-র ওপর নির্ভর করে, যা ডেভেলপারদের বাশ স্ক্রিপ্ট বা সফ্টওয়্যারের ভিতরে cURL-এর ফাংশনালিটি বসাতে দেয়।
সংক্ষেপে: Wget হলো ইন্টারনেট থেকে জিনিস পুল করার "সাধারণ মানুষের টুলবক্স", আর cURL হলো পাওয়ার ইউজার ও সিসাডমিনদের জন্য আরও গ্রানুলার কন্ট্রোল দারুণ এক্সটেনশন।
প্রশ্নোত্তর (FAQ)
১. লিনাক্সে সার্টিফিকেট এরর পেলাম। কীভাবে ফিক্স করব?
"peer's certificate issuer has been marked as not trusted" এরর আসলে কমন সার্টিফিকেট প্যাকেজ রি-ইনস্টল করুন।
- ডেবিয়ান/উবুন্টু:
sudo apt reinstall ca-certificates - ফেডোরা/সেন্টওএস/RHEL:
dnf reinstall ca-certificates - আর্চ-ভিত্তিক:
pacman -S ca-certificates(নোট:pacman -Sccদিয়ে ক্যাশ ক্লিয়ার করে নিন)
এরপরও এরর থাকলে সার্ভার সাইডে সমস্যা থাকতে পারে।
২. cURL এবং bash কমান্ড একসাথে চালানো নিরাপদ কি?
NodeJS-এর মতো কিছু ডেভেলপার curl [argument] | sudo -E bash - দিয়ে ইনস্টল করতে বলে। এটি ভয়ানক লাগতে পারে, কিন্তু অ্যাপের पीछे থাকা টিম বিশ্বস্ত হলে কিছু ভাঙবে না। ম্যালিশিয়াস এক্টর রিপোজিটরি (যেমন AUR) ও infilitrate করতে পারে, তাই cURL+রুট অ্যাক্সেস প্যাকেজ ম্যানেজারের চেয়ে বেশি অনিরাপদ নয়।
৩. cURL Tor-র সাথে ব্যবহার করা যায় কি?
হ্যাঁ! Tor ব্রাউজার বা standalone tor সার্ভিস চালু করে --proxy ফ্ল্যাগ ব্যবহার করুন। Tor লোকাল প্রক্সি দেয় IP মাস্ক করার জন্য। উদাহরণ:
curl --proxy localhost:9050 https://example.com
Standalone Tor সার্ভিস পোর্ট ৯০৫০, Tor ব্রাউজার পোর্ট ৯১৫০ ব্যবহার করে।
উপসংহার
লিনাক্সের পরিবর্তনশীল প্রকৃতির মাঝেও cURL টার্মিনাল ইউজারদের আর্শনালে একটি অপরিহার্য টুল হিসেবে তার জায়গা বজায় রেখেছে।
কমান্ড লাইনে নতুন হলে সর্বाधিক কার্যকর লিনাক্স কমান্ড দেখুন। শুধু ওয়েব ব্রাউজ করতে চাইলে টার্মিনাল থেকে ব্রাউজিংও করা যায়।