هر زمان که نیاز به ارسال یک درخواست HTTP ساده بدون ابزارهای معمولی بود، چند روش جایگزین وجود دارد که از طریق ترمینال لینوکس امکان دانلود فایلها را فراهم میکنند. این روشها میتوانند در مواقع نجات سیستم، ساخت Docker image یا حتی برای کنجکاوی مفید باشند. در ادامه پنج روش برای اتصال و دانلود فایل از طریق HTTP توضیح داده میشود.
ابتدا ساختار هدر HTTP را درک کنید
برای برقراری ارتباط HTTP، معمولاً نیاز به ارسال هدر HTTP دارید. در برخی از دستورات زیر باید این هدر به صورت دستی ساخته شود، اما پیچیده نیست.
هدر HTTP یک بلوک کوچک متن است که اتصال HTTP را پیکربندی میکند. نمونهای از هدر HTTP به شکل زیر است:
GET / HTTP/1.1\r\n
HOST: example.com\r\n
\r\n
- خط اول (request line) به کلاینت میگوید چه مسیری را درخواست کند. مسیر همان چیزی است که بعد از دامنه URL میآید، مثلاً example.com/path/foo.
- خط HOST نام هاست متصلشده را مشخص میکند.
- هر خط با \r\n پایان مییابد و کل هدر با یک خط خالی خاتمه مییابد.
این هدر سند اصلی سایت example.com را دریافت میکند. با درک این هدر، میتوان آن را در دستورات زیر استفاده کرد.
Telnet: فقط برای HTTP ساده
این دستور کمی عجیب به نظر میرسد، زیرا Telnet یک کلاینت HTTP نیست و باید هدر HTTP به صورت دستی ساخته شود. خطوط داخل پرانتز با دستورهای جدا شده با سمیکالن اجرا میشوند و به Telnet منتقل میشوند:
(echo "GET / HTTP/1.0"; echo "Host: example.com"; echo; sleep 1) | telnet example.com 80
- Telnet نمیتواند از TLS استفاده کند، بنابراین فقط برای HTTP ساده کاربرد دارد.
- نسخه HTTP/1.0 پس از دریافت پاسخ اتصال را میبندد.
- نصب Telnet در توزیعهای مختلف:
- Fedora:
sudo dnf install telnet -y - Debian/Ubuntu:
sudo apt install telnet -y - Arch: Telnet موجود نیست، اما میتوان از PuTTY استفاده کرد:
sudo pacman -S putty
Netcat: بهتر از Telnet
Netcat تقریباً همان کار Telnet را انجام میدهد، اما هدر HTTP را به صورت یک بلوک متن میگیرد.
HTTP ساده:
printf "GET / HTTP/1.0\r\nHost: example.com\r\n\r\n" | nc example.com 80
- نصب Netcat:
- Fedora:
sudo dnf install netcat -y - Debian/Ubuntu:
sudo apt install netcat-openbsd -y - Arch:
sudo pacman -S openbsd-netcat
با TLS:
printf "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | ncat --ssl example.com 443
- نصب Ncat:
- Fedora:
sudo dnf install nmap-ncat -y - Debian/Ubuntu:
sudo apt install ncat -y - Arch:
sudo pacman -S nmap
استفاده از کتابخانه Requests در Python
این روش برای فایلهای متنی یا HTML مناسب است و برای دادههای باینری (مانند تصاویر یا فایلهای ZIP) باید به شکل زیر عمل کرد:
python3 -c "import requests; open('output_file.zip','wb').write(requests.get('http://example.com/file.zip').content)"
- نصب Requests:
- بدون دسترسی ریشه:
pip install --user requests - Fedora:
sudo dnf install python3-requests -y - Debian/Ubuntu:
sudo apt install python3-requests -y - Arch:
sudo pacman -S python-requests
HTTPie: ابزار کاربردی
HTTPie برای تست REST API طراحی شده، اما میتواند به عنوان یک کلاینت HTTP معمولی برای دانلود فایل استفاده شود:
http GET example.com
https GET example.com
- نصب HTTPie:
- Fedora:
sudo dnf install httpie -y - Debian/Ubuntu:
sudo apt install httpie -y - Arch:
sudo pacman -S httpie
Aria2: ابزار همهکاره برای شبکه
Aria2 یک دانلودر قدرتمند ترمینال است که از پروتکلهای مختلفی مانند HTTP، HTTPS، FTP، SFTP، BitTorrent و WebSocket پشتیبانی میکند و با ایجاد چند اتصال موازی سرعت دانلود را افزایش میدهد:
aria2c -d /tmp -o test.html http://example.com
- نصب Aria2:
- Fedora:
sudo dnf install aria2 -y - Debian/Ubuntu:
sudo apt install aria2 -y - Arch:
sudo pacman -S aria2
توجه: Telnet و Netcat فقط برای فایلهای کوچک مناسب هستند و برای دانلود فایلهای بزرگ باید از کلاینتهای واقعی HTTP استفاده کرد. Python، HTTPie و Aria2 کلاینتهای واقعی هستند و نیازی به وارد کردن دستی هدر HTTP ندارند. در عمل، Telnet و Netcat بیشتر ابزارهای اضطراری محسوب میشوند و معرفی جالبی برای سطوح پایین اتصال HTTP هستند.













