از ارائهدهنده پروکسی یک نشانی گرفتهاید و میخواهید پیش از آنکه آن را در اسکرپر، یک cron job یا خط لوله CI بگذارید، بدانید کار میکند یا نه. سریعترین راه بررسی cURL است: یک دستور درخواست را از طریق پروکسی میفرستد و آدرس IP را که سایت مقصد میبیند چاپ میکند، و همان دستور بعداً بدون تغییر در یک اسکریپت شل قرار میگیرد.
در این نوشته گزینه -x، نام کاربری و رمز، SOCKS5، تنظیم پروکسی برای همه دستورها، یک اسکریپت دانلود با تلاش دوباره و متن دقیق پیامهای خطا را مرور میکنیم. همه دستورها با curl 8.21 روی یک پروکسی آزمایشی محلی اجرا شدهاند و گزینهها در راهنمای رسمی cURL (man page) مستند شدهاند.
cURL چیست؟
cURL (تلفظ: «کِرل») ابزاری خط فرمانی برای انتقال داده به سرورها و از سرورها با استفاده از URL است: صفحه و فایل دانلود میکند، فرم و درخواست API میفرستد و پاسخ را روی صفحه چاپ یا در فایل ذخیره میکند. کار اصلی را libcurl انجام میدهد؛ کتابخانه انتقال دادهای که PHP و زبانهای دیگر هم از آن استفاده میکنند.
مثل هر دستور دیگری، cURL نحو ثابتی دارد:
curl [options] [URL]بخش options تعیین میکند دستور چه کاری انجام دهد. از این پارامترها که به آنها flag هم میگویند بیش از 250 تا وجود دارد. -o page.html پاسخ را در فایل ذخیره میکند، -I فقط هدرها را میگیرد، -L ریدایرکتها را دنبال میکند و -x از پروکسی استفاده میکند. همه گزینهها به بزرگی و کوچکی حرف حساساند: -x پروکسی را تعیین میکند و -X متد HTTP را.
cURL روی macOS، روی Windows 10 و 11 با نام curl.exe و روی بیشتر توزیعهای Linux از پیش نصب است و روی همه این سیستمها یکسان رفتار میکند. در ایمیجهای کوچک کانتینر ممکن است نباشد و باید نصبش کنید (در Debian و Ubuntu با apt install curl). دستور curl --version را اجرا کنید: اگر در سطر Features: عبارت HTTPS-proxy دیده شود، نسخه شما میتواند از طریق TLS هم به پروکسی وصل شود.
cURL چه پروتکلهایی را پشتیبانی میکند؟
cURL برای مبدأ یا مقصد به یک URL نیاز دارد؛ پروتکلهای شبکهای که با URL آدرسدهی نمیشوند با cURL کار نمیکنند. نسخه فعلی این پروتکلها را فهرست میکند: DICT، FILE، FTP، FTPS، GOPHER، GOPHERS، HTTP، HTTPS، IMAP، IMAPS، LDAP، LDAPS، MQTT، MQTTS، POP3، POP3S، RTSP، SCP، SFTP، SMB، SMBS، SMTP، SMTPS، TELNET، TFTP، WS و WSS. دستور curl --version نشان میدهد نسخه شما کدامها را پشتیبانی میکند؛ RTMP که در فهرستهای قدیمیتر دیده میشود دیگر وجود ندارد.
اگر طرح نشانی را ننویسید، cURL پروتکل را از نام میزبان حدس میزند (ftp.example.com یعنی FTP و بیشتر نامها یعنی HTTP). برای پروکسی این موضوع از یک جهت مهم است: پروکسی HTTP ترافیک HTTP و HTTPS را حمل میکند؛ پروتکلهای دیگر فقط از راه تونل CONNECT (-p) عبور میکنند، آن هم به شرطی که پروکسی آن پورت را مجاز بداند. SOCKS5 هر اتصال TCP را جابهجا میکند، پس FTP یا SMTP از پشت پروکسی معمولاً یعنی SOCKS5.
چرا cURL را با پروکسی به کار ببریم؟
- مراحل قابل مشاهده. با
-vخروجی مفصلی از آنچه فرستاده و دریافت شده میگیرید: اتصال به پروکسی، درخواست CONNECT و هر دو پاسخ. برای عیبیابی بسیار به کار میآید، چون میبینید درخواست دقیقاً در کدام مرحله شکست میخورد. - همه انواع پروکسی با یک گزینه. HTTP، HTTPS، SOCKS4، SOCKS4a، SOCKS5 و SOCKS5h همگی با
-xتعریف میشوند. - مناسب اسکریپت. کدهای خروج (exit code)،
--retry، زمانهای انتظار (timeout) و--write-outبه اسکریپت شل امکان میدهند خطاها را مدیریت کند، و توابعcurl_*در PHP همین گزینهها را میپذیرند. - چند URL در یک دستور. میتوانید چند حالت از یک URL را با کروشه یا آکولاد در یک دستور بنویسید (URL globbing):
page[1-20].htmlیا{a,b,c}به چند درخواست تبدیل میشود که همه از همان پروکسی میروند.
کاربردهای رایج: بررسی کشور IP خروجی پیش از اجرای استخراج داده، آزمودن مقصدهای رصد قیمت از دید بازاری دیگر و دانلود در کارهای زمانبندیشده. معادلهای Node.js را در معادل cURL در JavaScript و نمونههای PHP را در وب اسکرپینگ با PHP آوردهایم.
cURL چگونه درخواست را از طریق پروکسی میفرستد؟
- cURL به پروکسی وصل میشود، نه به مقصد.
- مقصد HTTP، پروکسی HTTP: cURL درخواست را با URL کامل میفرستد (
GET http://example.com/ HTTP/1.1). پروکسی میتواند محتوای آن را بخواند. - مقصد HTTPS، پروکسی HTTP: cURL درخواست
CONNECT example.com:443را میفرستد و اگر نام کاربری و رمز داده باشید، هدرProxy-Authorizationرا هم همراهش میکند. پس از آنکه پروکسی با200پاسخ داد، اتصال TLS با مقصد درون همین تونل برقرار میشود و پروکسی فقط نام میزبان و پورت را میبیند. متد CONNECT در RFC 9110 تعریف شده است. - پروکسی SOCKS5: cURL وارد پروکسی میشود (با نام کاربری و رمز، اگر داده باشید) و از پروکسی میخواهد به مقصد وصل شود (RFC 1928). با
socks5://خودش نام میزبان را به IP تبدیل میکند و همان IP را میفرستد؛ باsocks5h://خود نام میزبان را میفرستد. - مقصد به IP پروکسی پاسخ میدهد. IP شما به مقصد نمیرسد، اما اگر cURL نامها را روی رایانه شما resolve کند، پرسوجوهای DNS از خط خود شما بیرون میروند.
تنظیم پروکسی در cURL: گزینه -x
ترمینال را باز کنید و با curl --help proxy فهرست همه گزینههای مربوط به پروکسی را ببینید. مهمترین سطر آن این است:
-x, --proxy <[protocol://]host[:port]> Use this proxyحرف x کوچک است. مشخصات پروکسی را با -x یا با --proxy میدهید؛ هر دو یک معنا دارند:
curl -x "http://user:pass@pr.proxynet.io:8000" https://httpbin.org/ipنشانی httpbin.org/ip آدرس IP مبدأ درخواست را برمیگرداند: اگر پروکسی کار کند، IP خروجی پروکسی را میبینید نه آدرس خودتان.
- بدون طرح یعنی HTTP. پروتکل پیشفرض پروکسی HTTP است، بنابراین
-x "user:pass@pr.proxynet.io:8000"دقیقاً مثل شکلhttp://رفتار میکند. - پورت را همیشه بنویسید. بدون پورت، cURL یک پورت پیشفرض برمیدارد: در آزمایش ما با curl 8.21 پورت 80 برای
http://، پورت 443 برایhttps://و پورت 1080 برای SOCKS (راهنمای رسمی هنوز 1080 را ذکر میکند). هیچکدام از اینها به احتمال زیاد پورت ارائهدهنده شما نیست، پس اتصال شکست میخورد یا به timeout میرسد. - نشانی را داخل گیومه دوتایی بگذارید تا پوسته فرمان نویسههای ویژهای مانند
&،?یا!را تفسیر نکند. -xفقط برای یک دستور است و بر متغیرهای محیطی پروکسی مقدم است. دستور بعدی دوباره مستقیم بیرون میرود.
در محصولات مسکونی و موبایل Proxynet یک گیتوی هر دو پروتکل HTTP و SOCKS5 را روی پورتهای جداگانه ارائه میدهد و بخش «Endpoint Generator» در پنل کاربری، نام کاربری را با کشور، شهر و نشستی که انتخاب میکنید میسازد.
چگونه cURL را با پروکسی HTTP یا HTTPS به کار ببریم؟
پروکسی HTTP هر دو نوع مقصد را حمل میکند:
# HTTPS target: CONNECT tunnel, the page stays encrypted
curl -x "http://user:pass@pr.proxynet.io:8000" https://httpbin.org/ip
# HTTP target: the proxy forwards the plain request
curl -x "http://user:pass@pr.proxynet.io:8000" http://httpbin.org/ipپروکسی HTTPS (https://) اتصال میان شما و خود پروکسی را هم رمزگذاری میکند. فقط وقتی از آن استفاده کنید که پورت پروکسی با TLS کار کند؛ https:// روی یک پورت HTTP ساده در مرحله دستدهی (handshake) شکست میخورد (در Windows با پیام SEC_E_INVALID_TOKEN و با OpenSSL معمولاً با wrong version number).
گزینههای گواهی میان این دو اتصال تقسیم شدهاند:
-k(--insecure) بررسی گواهی را فقط برای سایت مقصد کنار میگذارد. با مقصدhttp://هیچ اثری ندارد.--proxy-insecureبررسی گواهی پروکسی HTTPS را کنار میگذارد.--proxy-cacert file.pemامنتر است: گواهی CA پروکسی سازمانی را معتبر میشمارد بیآنکه بررسیها را خاموش کند.
-k را فقط برای آزمونهای سریع نگه دارید و هرگز در اسکریپتهایی که توکن میفرستند به کار نبرید. برای پروتکلهای غیر HTTP از پشت پروکسی HTTP، گزینه -p (--proxytunnel) را اضافه کنید. اینکه ترافیک رمزگذاریشده چگونه از پروکسی عبور میکند در صفحه پروکسی HTTPS آمده است.
چگونه نام کاربری و رمز پروکسی را بدهیم؟
هر دو شکل همان هدر Proxy-Authorization را میفرستند:
curl -x "http://user:pass@pr.proxynet.io:8000" https://httpbin.org/ip
curl -x "http://pr.proxynet.io:8000" -U "user:pass" https://httpbin.org/ipوقتی رمز داخل نشانی نوشته میشود، نویسههای ویژه آن باید با کدگذاری درصدی (percent-encoding) نوشته شوند: @ به شکل %40، : به شکل %3A و # به شکل %23. cURL پیش از ارسال آنها را به حالت اول برمیگرداند؛ در آزمایش ما p%40ss به شکل p@ss به پروکسی رسید. با -U (--proxy-user) کدگذاری لازم نیست. احراز هویت Basic پیشفرض است؛ پروکسیهای سازمانی ممکن است --proxy-ntlm، --proxy-digest یا --proxy-anyauth لازم داشته باشند.
رمزی که در خط فرمان مینویسید در تاریخچه پوسته (shell history) ثبت میشود. در اسکریپتها آن را از یک فایل پیکربندی خصوصی بخوانید (-K file) یا بهجای رمز از لیست سفید IP استفاده کنید (Proxynet تا 10 IP را میپذیرد). در نوشته احراز هویت پروکسی: نام کاربری و رمز یا لیست سفید IP این دو روش را مقایسه کردهایم و خطای 407 را هم توضیح دادهایم.
چگونه cURL را با پروکسی SOCKS5 به کار ببریم؟
نسخه SOCKS را بهعنوان طرح نشانی بنویسید:
curl -x "socks5h://user:pass@pr.proxynet.io:1080" https://httpbin.org/ip| طرح | تبدیل نام میزبان به IP | نام کاربری و رمز | کاربرد |
|---|---|---|---|
http:// | پروکسی | بله | وب اسکرپینگ، API و بیشتر ابزارها |
https:// | پروکسی | بله | پورت پروکسی که با TLS کار میکند |
socks5h:// | پروکسی | بله | SOCKS5 با DNS هماهنگ با موقعیت پروکسی |
socks5:// | رایانه شما | بله | مقصدهایی که فقط DNS شما آنها را میشناسد |
socks4a:// | پروکسی | فقط شناسه کاربر (User ID) | سرورهای قدیمی SOCKS4 |
socks4:// | رایانه شما | فقط شناسه کاربر (User ID) | سرورهای قدیمی SOCKS4 |
بسته به نسخه SOCKS، یکی از این طرحها را به کار میبرید. با socks5:// سرور DNS شما همه میزبانهایی را که باز میکنید میبیند و سایتهایی که پاسخ را بر اساس موقعیت تنظیم میکنند، برای موقعیت شما پاسخ میدهند. با socks5h:// نام میزبان را خود پروکسی resolve میکند نه رایانه شما و هر دو مشکل از میان میرود؛ برای اسکرپینگ معمولاً همین بهتر است. چرایی آن را در نشت WebRTC و DNS: چیست و چگونه جلوی آن را بگیریم توضیح دادهایم. گزینه قدیمیتر --socks5-hostname host:port معادل socks5h:// است و نام کاربری و رمز در آن با -U فرستاده میشود؛ گزینه --socks5 هم معادل socks5:// است و DNS را روی رایانه شما انجام میدهد.
برای تفاوتهای این دو پروتکل، تفاوت پروکسی SOCKS و HTTP و پروکسی SOCKS5: چطور کار میکند و چه فرقی دارد را بخوانید. پروکسی SOCKS5 در Proxynet روی پورت جداگانهای کنار پورت HTTP کار میکند.
چگونه پروکسی را برای همه دستورهای cURL تنظیم کنیم؟
| روش | دامنه اثر | نمونه |
|---|---|---|
-x | یک دستور | curl -x "http://user:pass@host:port" URL |
| متغیر محیطی | نشست پوسته | export https_proxy="http://user:pass@host:port" |
.curlrc | همه اجراهای همان کاربر | proxy = "http://host:port" |
متغیرهای محیطی. cURL برای مقصدهای HTTP متغیر http_proxy، برای HTTPS متغیر https_proxy یا HTTPS_PROXY و در نبود اینها ALL_PROXY را میخواند. http_proxy فقط با حروف کوچک کار میکند (محافظتی برای برنامههای CGI)، پس HTTP_PROXY در Linux و macOS نادیده گرفته میشود. در PowerShell: $env:HTTPS_PROXY = "http://user:pass@host:port". wget، pip و git هم همین متغیرها را میخوانند؛ استفاده از پروکسی در wget و صفحه متغیرهای پروکسی در everything curl را ببینید.
فایل پیکربندی. cURL پیش از هر اجرا فایل ~/.curlrc را میخواند (در Windows فایل %USERPROFILE%\.curlrc یا _curlrc):
proxy = "http://pr.proxynet.io:8000"
proxy-user = "user:pass"اگر -q را اولین گزینه بنویسید (curl -q URL)، cURL این فایل را برای همان یک اجرا نادیده میگیرد.
استثناها. با --noproxy "localhost,.internal.example" یا متغیر NO_PROXY، این میزبانها مستقیم وصل میشوند. هر نام زیردامنههایش را هم در بر میگیرد، بازههای CIDR مانند 192.168.0.0/16 کار میکنند و تنها نویسه عام (wildcard) قابل قبول یک * تنهاست. NO_PROXY حتی با -x هم اعمال میشود.
cURL موتور JavaScript ندارد، پس نمیتواند فایل PAC را اجرا کند. اگر شبکه شما از چنین فایلی استفاده میکند، آن را بخوانید (فایل PAC چیست؟) و پروکسیای را که برمیگرداند با -x به cURL بدهید.
چگونه بفهمیم cURL از پروکسی استفاده میکند؟
دستور curl https://api.ipify.org را یک بار بدون -x و یک بار با آن اجرا کنید: اگر آدرس دوم متفاوت و در کشور مورد انتظار باشد، پروکسی کار میکند. یک درخواست سالم HTTPS از طریق پروکسی HTTP در خروجی -v این سطرها را نشان میدهد:
* Establishing HTTP proxy tunnel to httpbin.org:443
> CONNECT httpbin.org:443 HTTP/1.1
> Proxy-Authorization: Basic dXNlcjpwYXNz
< HTTP/1.1 200 Connection Established
* CONNECT tunnel established, response 200مقدار Proxy-Authorization فقط با Base64 کدگذاری شده و رمزگذاری نیست؛ پیش از به اشتراک گذاشتن خروجی آن را پاک کنید. در اسکریپتها -w نتیجه را در یک سطر چاپ میکند:
curl -s -o /dev/null -x "http://user:pass@pr.proxynet.io:8000" \
-w "%{http_code} connect=%{http_connect} proxy_used=%{proxy_used}\n" https://httpbin.org/iphttp_connect پاسخ پروکسی به CONNECT است؛ proxy_used (از curl 8.7 به بعد) وقتی از پروکسی استفاده شده باشد مقدار 1 دارد. برای بررسی موقعیت، سرعت و نشت، نوشته آیا پروکسی کار میکند؟ چگونه پروکسی را آزمایش کنیم را ببینید.
نمونه: دانلود فهرستی از URLها از طریق پروکسی با تلاش دوباره
این اسکریپت URLهای فایل urls.txt را چهارتا چهارتا از طریق پروکسی دانلود میکند، خطاهای موقت را دوباره امتحان میکند و وضعیت و مدت هر درخواست را چاپ میکند. به cURL و یک پوسته POSIX (Linux، macOS یا Git Bash) نیاز دارد:
#!/usr/bin/env bash
# fetch.sh: download every URL in urls.txt through the proxy, 4 at a time
set -u
PROXY="${PROXY:-http://user:pass@pr.proxynet.io:8000}"
sed 's/^/url = /' urls.txt | curl \
--parallel --parallel-max 4 \
--proxy "$PROXY" \
--connect-timeout 10 --max-time 30 \
--retry 3 --retry-connrefused \
--fail --silent --show-error \
--create-dirs --output-dir pages --remote-name-all \
--write-out "%{http_code} %{time_total}s %{url}\n" \
--config ---config -سطرهایurl = …را ازsedمیخواند و باید آخر از همه بیاید، چون--remote-name-allفقط روی URLهایی اثر دارد که پس از آن اضافه میشوند.--retry 3خطاهای timeout و پاسخهای 408، 429، 500، 502، 503، 504، 522 و 524 را دوباره امتحان میکند، به ترتیب 1، 2 و 4 ثانیه صبر میکند و هدرRetry-Afterرا رعایت میکند.--max-timeانتقالی را که گیر کرده متوقف میکند؛--failخطاهای HTTP را به کد خروج 22 تبدیل میکند.- وقتی همه URLها روی یک سایتاند،
--parallel-maxرا پایین نگه دارید؛ درخواستهای موازی زیاد ممکن است پاسخ 429 به همراه داشته باشند.
در آزمایش ما چهار صفحه ذخیره شد، یک URL که 503 برمیگرداند سه بار دوباره امتحان شد و در پایان اسکریپت با کد 22 خارج شد.
برای اینکه ببینید گیتوی شما IP را میچرخاند یا نه، درخواست به api.ipify.org را چند بار تکرار کنید: گیتوی چرخشی هر بار IP تازهای برمیگرداند و نشست ثابت در Proxynet یک IP را به مدت 1 تا 60 دقیقه نگه میدارد. در چرخش IP چیست و چگونه کار میکند؟ توضیح دادهایم هر کدام کجا به کار میآید؛ پروکسی مسکونی از هر دو پشتیبانی میکند. برای دانلودهای سریع و انبوه از مقصدهایی که سختگیر نیستند، پروکسی دیتاسنتر هم کافی است.
خطاهای رایج پروکسی در cURL و راه رفع آنها
پیامها همانطور که curl 8.21 در آزمایشهای ما چاپ کرد:
curl: (5) Could not resolve proxy: …نام میزبان پروکسی اشتباه است: املای آن و گیومههای اضافه را بررسی کنید.curl: (7) Failed to connect to … over proxy …روی آن پورت چیزی پاسخ نمیدهد (یا چون پورتی ننوشتهاید، cURL سراغ یک پورت پیشفرض رفته است)، یا فایروال جلوی اتصال را میگیرد.curl: (7) CONNECT tunnel failed, response 407نام کاربری یا رمز اشتباه است، نویسههای ویژه کدگذاری نشدهاند یا IP شما در لیست سفید نیست. نسخههای قدیمیتر پیامcurl: (56) Received HTTP code 407 from proxy after CONNECTرا چاپ میکنند؛ برای مقصدهایhttp://فقط کد وضعیت 407 را میگیرید. کدهای وضعیت HTTP در وب اسکرپینگ را ببینید.curl: (56) Proxy CONNECT abortedپروکسی اتصال را بست؛ در آزمایش ما یک نشانیhttp://به پورت SOCKS5 اشاره میکرد.curl: (97) Received invalid version in initial SOCKS5 response.یک نشانیsocks5://به پورت HTTP اشاره میکند. پیامUser was rejected by the SOCKS5 serverیعنی نام کاربری یا رمز SOCKS اشتباه است.curl: (28) Connection timed out after … millisecondsپاسخی در زمان مقرر نرسید؛ خطای پروکسی چیست؟ رفع خطای پاسخ ندادن سرور پروکسی را ببینید.curl: (35) …یاSSL_ERROR_SYSCALLدستدهی TLS شکست خورد:https://روی پورت ساده پروکسی، یا دستگاهی در مسیر که اتصالهای TLS را قطع میکند.curl: (60) SSL certificate problem: unable to get local issuer certificateاغلب نشانه پروکسی سازمانیای است که TLS را بازرسی میکند. بهجای-kگواهی CA آن را نصب کنید.- پروکسی نادیده گرفته میشود. دنبال
NO_PROXY،HTTP_PROXYبا حروف بزرگ یا یک.curlrcدیگر بگردید؛-vنشان میدهد cURL اول به کدام آدرس وصل میشود. معادل همین خطاها در Python را در خطای Max Retries Exceeded With URL چیست و چگونه رفع میشود؟ بررسی کردهایم.
راهنمای انتخاب
| نیاز | پیشنهاد |
|---|---|
| یک بار آزمودن پروکسی تازه | curl -x "http://user:pass@host:port" https://httpbin.org/ip |
رمز شامل @، : یا # است | -U "user:pass" یا کدگذاری درصدی رمز |
| تبدیل نام میزبان به IP در سمت پروکسی | socks5h://، نه socks5:// |
| FTP، SMTP یا پروتکل دیگری غیر از HTTP | SOCKS5، یا -p همراه پروکسی HTTP |
| پروکسی برای یک نشست پوسته | export https_proxy=… و http_proxy با حروف کوچک |
| پروکسی برای همه اجراها | proxy = "…" در ~/.curlrc |
| بدون رمز در اسکریپتها | لیست سفید IP در پنل |
| IP ثابت برای فرایند ورود به حساب | نشست ثابت از «Endpoint Generator» |
پرسشهای متداول
آیا cURL از تنظیمات پروکسی سیستم در Windows یا macOS استفاده میکند؟
خیر. cURL پروکسی را فقط از -x، از متغیرهای محیطی و از .curlrc میگیرد. پروکسیای که در تنظیمات Windows یا در System Settings در macOS تعریف شده باشد روی آن اثری ندارد.
چگونه cURL را وادار کنیم برای یک درخواست پروکسی را نادیده بگیرد؟
کافی است --noproxy "*" یا -x "" را اضافه کنید. هر کدام همان دستور را مستقیم میفرستد، حتی وقتی https_proxy یا .curlrc پروکسی تعیین کرده باشد.
چرا دستور پروکسی cURL در PowerShell شکست میخورد؟
در Windows PowerShell 5.1 دستور curl نام مستعار Invoke-WebRequest است که گزینه -x را نمیشناسد. برای اجرای cURL واقعی curl.exe را بنویسید. در PowerShell 7 این نام مستعار دیگر وجود ندارد.
تفاوت socks5 و socks5h در cURL چیست؟
با socks5:// رایانه شما نام میزبان را به IP تبدیل میکند؛ با socks5h:// این کار را پروکسی انجام میدهد، پس DNS با موقعیت پروکسی هماهنگ است.
آیا میتوان در PHP از cURL با پروکسی استفاده کرد؟
بله. توابع cURL در PHP از libcurl استفاده میکنند: CURLOPT_PROXY نشانی را تعیین میکند، CURLOPT_PROXYUSERPWD نام کاربری و رمز را و CURLOPT_PROXYTYPE نوع SOCKS را. نمونهها در وب اسکرپینگ با PHP: cURL، Guzzle و تنظیم پروکسی آمدهاند.
آیا cURL میتواند در هر درخواست پروکسی را بچرخاند؟
cURL در هر دستور از یک پروکسی استفاده میکند. گیتوی چرخشی برای هر اتصال IP خروجی تازهای میدهد، پس حلقهای از دستورها هر بار IP متفاوتی میگیرد. چند URL در یک دستور معمولاً از یک اتصال مشترک استفاده میکنند و IP آن را هم مشترک دارند.
خلاصه
برای استفاده از cURL با پروکسی، -x را با نشانی کامل اضافه کنید: طرح، نام کاربری و رمز، میزبان و پورت. برای بیشتر کارها http:// و برای SOCKS5 با DNS سمت پروکسی socks5h:// را به کار ببرید، وقتی همه دستورها به پروکسی نیاز دارند آن را در https_proxy یا .curlrc بگذارید و -k را فقط برای آزمون نگه دارید. وقتی دستوری شکست میخورد، کد خروج و خروجی -v نشان میدهند که مشکل از نشانی است، از نام کاربری و رمز یا از مقصد. برای نقطههای اتصال مسکونی، موبایل و SOCKS5 که با همین دستورها کار میکنند، پروکسیهای Proxynet را ببینید.




