ProxynetProxynet

استفاده از cURL با پروکسی: دستورها و مثال‌ها

تاریخ انتشار:

4 دقیقه مطالعه

PXNET
نویسنده: PXNET
استفاده از cURL با پروکسی

cURL چیست؟

cURL ابزاری خط فرمانی برای انتقال داده به سرورها و از سرورهاست. با چند خط در ترمینال، حجم بزرگی از داده را از یک سرور به سرور دیگر جابه‌جا می‌کنید.

مثل هر دستور دیگری، cURL نحو ثابتی دارد:

curl [options] [URL]

بخش options تعیین می‌کند دستور چه کاری انجام دهد. از این پارامترها که به آن‌ها flag هم می‌گویند حدود 380 تا وجود دارد. یکی از شناخته‌شده‌ترین‌ها -o است که محتوای یک صفحه را در فایل می‌نویسد.

cURL برای مبدأ یا مقصد به یک URL نیاز دارد؛ یعنی شکل مشخصی از شناسه یکنواخت منبع. پروتکل‌های شبکه‌ای که با URL آدرس‌دهی نمی‌شوند با cURL کار نمی‌کنند.

در لایه زیرین، cURL روی کتابخانه libcurl سوار است و پروتکل‌های پشتیبانی‌شده از همان‌جا می‌آیند. libcurl قابل حمل است و روی لینوکس و ویندوز و macOS یکسان رفتار می‌کند؛ روی این سیستم‌ها معمولاً از پیش نصب شده است. اگر نبود، بسته آن را از سایت cURL بگیرید.

cURL چه پروتکل‌هایی را پشتیبانی می‌کند؟

cURL از پروتکل‌هایی پشتیبانی می‌کند که داده را در هر دو جهت منتقل می‌کنند و با URL آدرس‌دهی می‌شوند. HTTP پیش‌فرض است؛ جدا از آن با این‌ها هم کار می‌کند:

  • DICT
  • FILE
  • FTP و FTPS
  • GOPHER و GOPHERS
  • IMAP و IMAPS
  • LDAP و LDAPS
  • MQTT
  • POP3 و POP3S
  • RTMP و RTSP
  • SCP و SFTP
  • SMB و SMBS
  • SMTP و SMTPS
  • TELNET
  • TFTP

چرا cURL؟

cURL به این دلیل فراگیر است که همه‌کاره و ساده و قابل اتکاست. صفحه‌های کامل را دانلود می‌کند، فایل را در هر قالب پشتیبانی‌شده منتقل می‌کند و از احراز هویت کاربر، HTTP POST، مِتالینک، آپلود FTP و استفاده از پروکسی روی اتصال SSL هم پشتیبانی می‌کند. به این‌ها اضافه کنید:

  • خروجی مفصل از آنچه فرستاده و دریافت شده؛ برای عیب‌یابی بسیار به کار می‌آید
  • پشتیبانی از پروتکل‌های شبکه متعدد
  • امکان نوشتن چند حالت از یک URL در یک دستور با آکولاد
  • رفتار یکسان روی همه سیستم‌عامل‌های رایج

cURL با پروکسی HTTP یا HTTPS

برای آزمودن، سرویسی به کار می‌آید که IP مبدأ درخواست را برمی‌گرداند: اگر پروکسی کار کند، آدرس پروکسی را می‌بینید نه آدرس خودتان.

دستورها

ترمینال را باز کنید و فهرست سوییچ‌ها را ببینید:

bash
curl --help

در آن فهرست بلند، از جمله این سطر هست:

-x, --proxy [protocol://]host[:port]

حرف x کوچک است. مشخصات پروکسی را با -x یا با --proxy می‌دهید؛ هر دو یک معنا دارند:

bash
curl -x "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

یا

bash
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

اگر خطای گواهی SSL گرفتید، -k را با حرف کوچک به دستور اضافه کنید تا cURL اتصال تأییدنشده را بپذیرد:

bash
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip" -k

نشانی پروکسی و نشانی مقصد هر دو داخل گیومه دوتایی قرار گرفته‌اند. این اتفاقی نیست؛ شیوه توصیه‌شده همین است تا نویسه‌های ویژه داخل URL پوسته فرمان را گیج نکنند.

پروتکل پیش‌فرض پروکسی HTTP است، بنابراین این دو دستور دقیقاً یک کار می‌کنند:

bash
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"
curl --proxy "user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

cURL با پروکسی SOCKS

bash
curl -x "socks5://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

بسته به نسخه SOCKS، از socks4:// یا socks4a:// یا socks5:// یا socks5h:// استفاده می‌کنید. با socks5h:// نام میزبان را خود پروکسی resolve می‌کند نه رایانه شما؛ برای اسکرپینگ معمولاً همین بهتر است، چون در غیر این صورت پرس‌وجوی DNS از خط خودتان بیرون می‌رود.

راه دیگر این است که پروکسی را به جای -x با --socks5 تعیین کنید؛ در این حالت نام کاربری و رمز با --proxy-user فرستاده می‌شوند.

cURL برای اتوماسیون ابزار بسیار نیرومندی است و از نظر پشتیبانی پروکسی یکی از کامل‌ترین خط فرمان‌های موجود. چون libcurl با PHP هم خوب کار می‌کند، بسیاری از برنامه‌های وب در پروژه‌های اسکرپینگ سراغ آن می‌روند و همین cURL را به بخشی از تجهیزات پایه هر اسکرپر تبدیل کرده است. اینکه چه آدرس‌هایی به کار ببرید نرخ موفقیت را تعیین می‌کند: پروکسی مسکونی برای مقصدهای سخت‌گیر و پروکسی دیتاسنتر برای برداشت‌های سریع و انبوه.

پرسش از ChatGPTپرسش از Claude