بازگشت به وبلاگ

تنظیم پروکسی در curl و wget: راهنمای کامل با مثال‌ها برای پارس کردن

راهنمای جامع استفاده از پروکسی در curl و wget: نمونه‌های دستورات، تنظیمات احراز هویت، دور زدن محدودیت‌ها در پارسینگ و اتوماسیون درخواست‌ها.

📅۲۵ بهمن ۱۴۰۴
```html

در حین پارس کردن وب‌سایت‌ها، اتوماسیون درخواست‌های API یا نظارت بر قیمت‌های رقبای خود در بازارها، به‌طور حتم با مسدودیت‌های IP مواجه خواهید شد. ابزارهای curl و wget — ابزارهای استاندارد برای کار با درخواست‌های HTTP در خط فرمان هستند و تنظیم صحیح پروکسی در آن‌ها برای دور زدن محدودیت‌ها بسیار مهم است. در این مقاله تمام روش‌های استفاده از پروکسی در curl و wget را بررسی خواهیم کرد: از دستورات پایه‌ای تا سناریوهای پیشرفته با چرخش IP و پردازش خطاها.

سینتکس پایه‌ای پروکسی در curl و wget

با ساده‌ترین دستورات برای اتصال از طریق پروکسی شروع می‌کنیم. هر دو ابزار از پارامتر برای مشخص کردن سرور پروکسی پشتیبانی می‌کنند، اما سینتکس کمی متفاوت است.

استفاده از پروکسی در curl

در curl پروکسی از طریق پارامتر -x یا --proxy مشخص می‌شود. فرمت پایه‌ای دستور:

curl -x http://proxy-server:port http://example.com

مثال خاص با یک سرور پروکسی واقعی:

curl -x http://45.130.123.45:8080 http://api.ipify.org

این دستور درخواست را به api.ipify.org (سرویسی که آدرس IP شما را برمی‌گرداند) از طریق پروکسی مشخص شده ارسال می‌کند. شما IP پروکسی را خواهید دید، نه آدرس واقعی خود را.

استفاده از پروکسی در wget

در wget پروکسی از طریق پارامتر -e use_proxy=yes و متغیرهای محیطی تنظیم می‌شود، یا به‌طور مستقیم از طریق گزینه‌ها:

wget -e use_proxy=yes -e http_proxy=http://45.130.123.45:8080 http://example.com

یا گزینه کوتاه‌تری از طریق متغیرهای محیطی (در مورد آن در بخش زیر بیشتر توضیح داده شده است):

export http_proxy="http://45.130.123.45:8080"
wget http://example.com

احراز هویت در سرور پروکسی

بیشتر خدمات پروکسی تجاری نیاز به احراز هویت با نام کاربری و رمز عبور دارند. این امر پروکسی را از استفاده غیرمجاز محافظت کرده و امکان پیگیری ترافیک هر مشتری را فراهم می‌کند. بیایید ببینیم چگونه می‌توان اطلاعات حساب را در curl و wget ارسال کرد.

احراز هویت در curl

در curl می‌توان نام کاربری و رمز عبور را مستقیماً در URL سرور پروکسی یا از طریق پارامتر جداگانه -U مشخص کرد:

# روش 1: نام کاربری و رمز عبور در URL
curl -x http://username:password@proxy-server:port http://example.com

# روش 2: از طریق پارامتر -U
curl -x http://proxy-server:port -U username:password http://example.com

مثال خاص با اطلاعات حساب:

curl -x http://user123:pass456@45.130.123.45:8080 http://api.ipify.org

نکته مهم: اگر رمز عبور شامل نمادهای خاص (@، :، /، ؟) باشد، باید آن‌ها را به فرمت URL کدگذاری کنید. به عنوان مثال، نماد @ به %40 تبدیل می‌شود:

# اگر رمز عبور شامل @ باشد: pass@456
curl -x http://user123:pass%40456@45.130.123.45:8080 http://api.ipify.org

احراز هویت در wget

در wget احراز هویت از طریق پارامترهای --proxy-user و --proxy-password تنظیم می‌شود:

wget --proxy-user=username --proxy-password=password \
     -e use_proxy=yes -e http_proxy=http://45.130.123.45:8080 \
     http://example.com

یا از طریق متغیرهای محیطی با اطلاعات حساب در URL:

export http_proxy="http://username:password@45.130.123.45:8080"
wget http://example.com

کار با انواع مختلف پروکسی: HTTP، HTTPS، SOCKS5

سرورهای پروکسی بر اساس پروتکل‌های مختلف کار می‌کنند و انتخاب نوع بستگی به وظیفه دارد. پروکسی‌های HTTP برای درخواست‌های ساده مناسب هستند، HTTPS رمزگذاری را فراهم می‌کنند و SOCKS5 در سطح پایین‌تری کار می‌کنند و از هر نوع ترافیکی پشتیبانی می‌کنند. در حین پارس کردن بازارهایی مانند Wildberries یا Ozon معمولاً از پروکسی‌های مسکونی استفاده می‌شود که می‌توانند بر اساس هر یک از این پروتکل‌ها کار کنند.

پروکسی‌های HTTP و HTTPS

پروکسی‌های HTTP رایج‌ترین نوع هستند. آن‌ها در سطح پروتکل HTTP کار می‌کنند و برای اکثر وظایف وب‌پارسینگ مناسب هستند:

# پروکسی HTTP در curl
curl -x http://proxy-server:8080 http://example.com

# پروکسی HTTPS در curl (برای اتصالات امن)
curl -x https://proxy-server:8080 https://example.com

نکته مهم: حتی اگر وب‌سایت هدف از HTTPS استفاده کند، پروکسی می‌تواند HTTP باشد. Curl به‌طور خودکار تونل را از طریق روش CONNECT برقرار می‌کند:

# پروکسی HTTP برای وب‌سایت HTTPS (به درستی کار می‌کند)
curl -x http://proxy-server:8080 https://secure-site.com

پروکسی SOCKS5

SOCKS5 پروتکلی بسیار عمومی‌تر است که در سطح TCP کار می‌کند و از هر نوع ترافیکی (HTTP، HTTPS، FTP و حتی UDP) پشتیبانی می‌کند. این ویژگی SOCKS5 را برای وظایف پیچیده اتوماسیون ایده‌آل می‌سازد:

# SOCKS5 در curl
curl -x socks5://proxy-server:1080 http://example.com

# SOCKS5 با احراز هویت
curl -x socks5://username:password@proxy-server:1080 http://example.com

# SOCKS5h (حل DNS از طریق پروکسی)
curl -x socks5h://proxy-server:1080 http://example.com

تفاوت بین socks5 و socks5h: در مورد اول درخواست‌های DNS از کامپیوتر شما می‌روند، در مورد دوم — از طریق سرور پروکسی. از socks5h استفاده کنید اگر می‌خواهید تمام فعالیت خود را، از جمله درخواست‌های DNS، به‌طور کامل پنهان کنید.

در wget پشتیبانی از SOCKS5 محدود است، بنابراین برای چنین وظایفی بهتر است از curl یا ابزارهای اضافی مانند proxychains استفاده کنید.

نکته: برای پارس کردن بازارها (Wildberries، Ozon، یاندکس.مارکت) توصیه می‌شود از پروکسی‌های مسکونی یا موبایلی با پروتکل HTTP/HTTPS استفاده کنید — آن‌ها کمتر تحت مسدودیت قرار می‌گیرند، زیرا IP کاربران واقعی را دارند.

تنظیم پروکسی از طریق متغیرهای محیطی

اگر به‌طور مرتب از پروکسی استفاده می‌کنید، بهتر است یک بار متغیرهای محیطی را تنظیم کنید تا اینکه در هر دستور پارامترها را مشخص کنید. Curl و wget به‌طور خودکار این متغیرها را می‌خوانند.

تنظیم برای جلسه فعلی

متغیرها را در ترمینال صادر کنید (تا زمان بسته شدن جلسه معتبر هستند):

# برای ترافیک HTTP
export http_proxy="http://username:password@proxy-server:8080"

# برای ترافیک HTTPS
export https_proxy="http://username:password@proxy-server:8080"

# برای ترافیک FTP
export ftp_proxy="http://username:password@proxy-server:8080"

# برای SOCKS5
export all_proxy="socks5://username:password@proxy-server:1080"

پس از این، curl و wget به‌طور خودکار از پروکسی استفاده خواهند کرد:

# پروکسی به‌طور خودکار اعمال می‌شود
curl http://api.ipify.org
wget http://example.com

تنظیم دائمی در .bashrc یا .zshrc

برای اینکه پروکسی‌ها در هر بار راه‌اندازی ترمینال اعمال شوند، متغیرها را به فایل پیکربندی شل خود اضافه کنید:

# فایل را در ویرایشگر باز کنید
nano ~/.bashrc  # برای bash
# یا
nano ~/.zshrc   # برای zsh

# در انتهای فایل اضافه کنید:
export http_proxy="http://username:password@proxy-server:8080"
export https_proxy="http://username:password@proxy-server:8080"

# تغییرات را ذخیره و اعمال کنید:
source ~/.bashrc

استثناها: no_proxy

گاهی اوقات نیاز است که آدرس‌های خاصی را از پروکسی‌کردن مستثنی کنید (به عنوان مثال، localhost یا خدمات داخلی):

export no_proxy="localhost,127.0.0.1,192.168.0.0/16,.local"

اکنون درخواست‌ها به این آدرس‌ها به‌طور مستقیم و بدون پروکسی انجام خواهند شد.

چرخش پروکسی در اسکریپت‌های bash

در حین پارس کردن انبوه (به عنوان مثال، جمع‌آوری قیمت‌ها از هزاران کارت محصول در Wildberries) استفاده از یک پروکسی منجر به مسدودیت خواهد شد. راه‌حل — چرخش آدرس‌های IP. بیایید ببینیم چگونه می‌توان این کار را در اسکریپت‌های bash پیاده‌سازی کرد.

چرخش ساده از لیست پروکسی

یک فایل proxies.txt با لیستی از سرورهای پروکسی (هر کدام در یک خط) ایجاد کنید:

http://user1:pass1@proxy1.example.com:8080
http://user2:pass2@proxy2.example.com:8080
http://user3:pass3@proxy3.example.com:8080

اسکریپت برای چرخش متوالی پروکسی:

#!/bin/bash

# فایل با لیست URL برای پارس کردن
urls_file="urls.txt"
# فایل با لیست پروکسی
proxies_file="proxies.txt"

# خواندن پروکسی‌ها به آرایه
mapfile -t proxies < "$proxies_file"
proxy_count=${#proxies[@]}
current_proxy=0

# پردازش هر URL
while IFS= read -r url; do
    # انتخاب پروکسی به صورت دورانی
    proxy="${proxies[$current_proxy]}"
    
    echo "درخواست به $url از طریق $proxy"
    curl -x "$proxy" -s "$url" -o "output_$(basename $url).html"
    
    # تغییر به پروکسی بعدی
    current_proxy=$(( (current_proxy + 1) % proxy_count ))
    
    # وقفه بین درخواست‌ها (1-3 ثانیه)
    sleep $((RANDOM % 3 + 1))
done < "$urls_file"

این اسکریپت به‌طور متوالی از پروکسی‌های موجود در لیست استفاده می‌کند و پس از آخرین پروکسی به اولی بازمی‌گردد. وقفه تصادفی بین درخواست‌ها فعالیت را طبیعی‌تر می‌کند.

انتخاب تصادفی پروکسی

برای افزایش غیرقابل پیش‌بینی بودن می‌توانید پروکسی را به‌صورت تصادفی انتخاب کنید:

#!/bin/bash

proxies_file="proxies.txt"
mapfile -t proxies < "$proxies_file"
proxy_count=${#proxies[@]}

while IFS= read -r url; do
    # انتخاب تصادفی پروکسی
    random_index=$((RANDOM % proxy_count))
    proxy="${proxies[$random_index]}"
    
    echo "درخواست به $url از طریق پروکسی #$random_index"
    curl -x "$proxy" -s "$url" -o "output_$(date +%s).html"
    
    sleep $((RANDOM % 3 + 1))
done < "urls.txt"

چرخش خودکار از طریق API سرویس پروکسی

بسیاری از ارائه‌دهندگان پروکسی (شامل سرویس‌هایی که پروکسی‌های مسکونی ارائه می‌دهند) چرخش خودکار را از طریق یک نقطه ورودی واحد ارائه می‌دهند. شما از یک آدرس پروکسی استفاده می‌کنید و IP در هر درخواست یا بر اساس تایمر تغییر می‌کند:

# پروکسی با چرخش خودکار
# IP در هر درخواست تغییر می‌کند
curl -x http://username:password@rotating.proxy.com:8080 http://api.ipify.org
curl -x http://username:password@rotating.proxy.com:8080 http://api.ipify.org

# دو درخواست بالا آدرس‌های IP متفاوتی دریافت خواهند کرد

این راحت‌ترین روش برای پارس کردن در مقیاس بزرگ است — نیازی به مدیریت دستی لیست پروکسی نیست.

انتقال هدرها و User-Agent از طریق پروکسی

وب‌سایت‌های مدرن فقط IP را تجزیه و تحلیل نمی‌کنند، بلکه هدرهای HTTP درخواست را نیز بررسی می‌کنند. عدم وجود User-Agent یا هدرهای مشکوک می‌تواند منجر به مسدودیت حتی در صورت استفاده از پروکسی‌های باکیفیت شود. بیایید ببینیم چگونه هدرها را به‌درستی در curl و wget تنظیم کنیم.

User-Agent در curl

User-Agent هدر است که مرورگر و سیستم‌عامل را شناسایی می‌کند. Curl به‌طور پیش‌فرض User-Agent خود را (curl/7.x.x) ارسال می‌کند که به‌سرعت اتوماسیون را نشان می‌دهد. آن را با یک مرورگر واقعی جایگزین کنید:

# Chrome در ویندوز
curl -x http://proxy:8080 \
     -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
     http://example.com

# Firefox در macOS
curl -x http://proxy:8080 \
     -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0" \
     http://example.com

هدرهای اضافی

برای درخواست واقعی‌تر، هدرهای معمول مرورگر را اضافه کنید:

curl -x http://proxy:8080 \
     -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0" \
     -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
     -H "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8" \
     -H "Accept-Encoding: gzip, deflate, br" \
     -H "Connection: keep-alive" \
     -H "Upgrade-Insecure-Requests: 1" \
     http://example.com

User-Agent در wget

در wget User-Agent از طریق پارامتر --user-agent تنظیم می‌شود:

wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0" \
     -e use_proxy=yes -e http_proxy=http://proxy:8080 \
     http://example.com

تصادفی‌سازی User-Agent در اسکریپت‌ها

برای پارس کردن در مقیاس بزرگ، مفید است که User-Agent را تغییر دهید تا درخواست‌ها به‌نظر برسد که از کاربران مختلف می‌آید:

#!/bin/bash

# آرایه User-Agent
user_agents=(
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36"
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Safari/605.1.15"
    "Mozilla/5.0 (X11; Linux x86_64) Firefox/121.0"
    "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) Safari/604.1"
)

while IFS= read -r url; do
    # انتخاب تصادفی User-Agent
    random_ua=${user_agents[$RANDOM % ${#user_agents[@]}]}
    
    curl -x http://proxy:8080 -A "$random_ua" -s "$url"
    sleep 2
done < "urls.txt"

تشخیص مشکلات و پردازش خطاها

هنگام کار با پروکسی، اغلب خطاهایی مانند تایم‌اوت، عدم اتصال و احراز هویت نادرست پیش می‌آید. بیایید ببینیم چگونه می‌توان این وضعیت‌ها را تشخیص و پردازش کرد.

بررسی کارایی پروکسی

ساده‌ترین راه برای بررسی پروکسی — درخواست به سرویسی که IP شما را برمی‌گرداند:

# بررسی پروکسی HTTP
curl -x http://proxy:8080 http://api.ipify.org

# بررسی پروکسی SOCKS5
curl -x socks5://proxy:1080 http://api.ipify.org

# با نمایش جزئیات
curl -x http://proxy:8080 -v http://api.ipify.org

پارامتر -v (verbose) جزئیات اتصال، از جمله هدرها و خطاها را نشان می‌دهد.

پردازش تایم‌اوت‌ها

پروکسی‌های کند یا سرورهای شلوغ ممکن است باعث تایم‌اوت شوند. محدودیت‌های زمانی معقولی را تعیین کنید:

# تایم‌اوت اتصال 10 ثانیه، تایم‌اوت کلی 30 ثانیه
curl -x http://proxy:8080 --connect-timeout 10 --max-time 30 http://example.com

# در wget
wget --timeout=30 --tries=3 -e http_proxy=http://proxy:8080 http://example.com

پردازش خودکار خطاها در اسکریپت‌ها

اسکریپت برای پارس کردن با تغییر خودکار به پروکسی بعدی در صورت بروز خطا:

#!/bin/bash

proxies_file="proxies.txt"
mapfile -t proxies < "$proxies_file"

fetch_with_retry() {
    local url=$1
    local max_attempts=3
    
    for proxy in "${proxies[@]}"; do
        echo "تلاش از طریق پروکسی: $proxy"
        
        if curl -x "$proxy" \
                --connect-timeout 10 \
                --max-time 30 \
                -s -f "$url" -o output.html; then
            echo "موفقیت با پروکسی: $proxy"
            return 0
        else
            echo "خطا با پروکسی: $proxy، تلاش برای بعدی"
        fi
    done
    
    echo "تمام پروکسی‌ها برای $url در دسترس نیستند"
    return 1
}

# استفاده
fetch_with_retry "http://example.com/page1"

پارامتر -f باعث می‌شود curl در صورت دریافت وضعیت‌های HTTP 4xx و 5xx خطا برگرداند، که به شما امکان می‌دهد نه تنها خطاهای شبکه، بلکه مسدودیت‌ها در سطح برنامه را نیز پردازش کنید.

لاگ‌گذاری برای اشکال‌زدایی

جزئیات درخواست‌ها را برای تحلیل مشکلات ذخیره کنید:

# ذخیره هدرهای پاسخ
curl -x http://proxy:8080 -D headers.txt http://example.com

# لاگ کامل تعامل
curl -x http://proxy:8080 -v http://example.com 2>&1 | tee curl.log

# فقط وضعیت HTTP
curl -x http://proxy:8080 -o /dev/null -s -w "%{http_code}\n" http://example.com

سناریوهای عملی استفاده

بیایید به وظایف واقعی بپردازیم که در آن curl و wget با پروکسی مشکلات تجاری خاصی را حل می‌کنند.

پارس کردن قیمت‌های رقبای بازارها

وظیفه: جمع‌آوری قیمت‌ها برای 500 محصول رقبای خود از Wildberries برای تحلیل استراتژی قیمت‌گذاری. Wildberries به‌طور فعال درخواست‌های انبوه از یک IP را مسدود می‌کند.

راه‌حل: استفاده از پروکسی‌های مسکونی با چرخش و تصادفی‌سازی User-Agent:

#!/bin/bash

# پروکسی با چرخش خودکار
PROXY="http://user:pass@rotating-residential.proxy.com:8080"

# آرایه User-Agent
user_agents=(
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0"
    "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0) Safari/604.1"
)

# خواندن ID محصولات از فایل
while IFS= read -r product_id; do
    ua=${user_agents[$RANDOM % ${#user_agents[@]}]}
    
    curl -x "$PROXY" \
         -A "$ua" \
         -H "Accept-Language: ru-RU,ru;q=0.9" \
         -s "https://www.wildberries.ru/catalog/${product_id}/detail.aspx" \
         -o "products/${product_id}.html"
    
    echo "محصول $product_id دانلود شد"
    sleep $((RANDOM % 5 + 3))  # وقفه 3-8 ثانیه
done < product_ids.txt

نظارت بر دسترسی API از مناطق مختلف

وظیفه: بررسی اینکه API سرویس شما چگونه برای کاربران از کشورهای مختلف کار می‌کند (مسدودیت‌های جغرافیایی، سرعت پاسخ).

راه‌حل: پروکسی با IP از کشورهای مورد نظر:

#!/bin/bash

# پروکسی از کشورهای مختلف
declare -A proxies=(
    ["US"]="http://user:pass@us-proxy.com:8080"
    ["DE"]="http://user:pass@de-proxy.com:8080"
    ["JP"]="http://user:pass@jp-proxy.com:8080"
)

API_URL="https://api.yourservice.com/v1/status"

for country in "${!proxies[@]}"; do
    echo "بررسی از $country..."
    
    response_time=$(curl -x "${proxies[$country]}" \
                         -s -o /dev/null \
                         -w "%{time_total}" \
                         "$API_URL")
    
    http_code=$(curl -x "${proxies[$country]}" \
                     -s -o /dev/null \
                     -w "%{http_code}" \
                     "$API_URL")
    
    echo "$country: HTTP $http_code، زمان پاسخ ${response_time}s"
done

دانلود فایل‌ها از طریق wget با چرخش پروکسی

وظیفه: دانلود آرشیو فایل‌ها (تصاویر محصولات، مستندات) از سایتی که سرعت را برای یک IP محدود می‌کند.

#!/bin/bash

proxies_file="proxies.txt"
mapfile -t proxies < "$proxies_file"
proxy_count=${#proxies[@]}
current=0

while IFS= read -r file_url; do
    proxy="${proxies[$current]}"
    filename=$(basename "$file_url")
    
    echo "دانلود $filename از طریق پروکسی #$current"
    
    wget --proxy-user=username --proxy-password=password \
         -e use_proxy=yes -e http_proxy="$proxy" \
         -O "downloads/$filename" \
         "$file_url"
    
    current=$(( (current + 1) % proxy_count ))
    sleep 2
done < file_urls.txt

آزمایش خلاقیت‌های تبلیغاتی در GEO‌های مختلف

وظیفه: بررسی اینکه تبلیغات Facebook Ads برای کاربران از ایالات متحده، کانادا و بریتانیا چگونه به نظر می‌رسد (ارزهای مختلف، زبان‌ها، دسترسی به پیشنهادات).

#!/bin/bash

# پروکسی‌های موبایلی از کشورهای مختلف برای واقع‌گرایی
declare -A mobile_proxies=(
    ["US"]="http://user:pass@us-mobile.proxy.com:8080"
    ["CA"]="http://user:pass@ca-mobile.proxy.com:8080"
    ["GB"]="http://user:pass@gb-mobile.proxy.com:8080"
)

AD_URL="https://www.facebook.com/ads/library/?id=YOUR_AD_ID"

for country in "${!mobile_proxies[@]}"; do
    curl -x "${mobile_proxies[$country]}" \
         -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0) Safari/604.1" \
         -H "Accept-Language: en-US,en;q=0.9" \
         -s "$AD_URL" \
         -o "ads_preview_${country}.html"
    
    echo "پیش‌نمایش برای $country ذخیره شد"
done

برای چنین وظایفی، پروکسی‌های موبایلی به‌ویژه مؤثر هستند، زیرا آن‌ها کاربران واقعی گوشی‌های هوشمند را شبیه‌سازی می‌کنند و کمتر باعث مشکوک شدن سیستم‌های ضد تقلب Facebook می‌شوند.

مهم برای آربیتراژکنندگان: هنگام بررسی خلاقیت‌های تبلیغاتی از طریق پروکسی، از IP‌های موبایلی و User-Agent‌های مربوط به دستگاه‌های موبایل استفاده کنید. Facebook سازگاری داده‌ها را تجزیه و تحلیل می‌کند (نوع دستگاه بر اساس User-Agent باید با نوع IP مطابقت داشته باشد).

اتوماسیون بررسی دسترسی به وب‌سایت

وظیفه: نظارت بر دسترسی به وب‌سایت شما هر 5 دقیقه، با شبیه‌سازی درخواست‌ها از کاربران واقعی (نه از IP سرور).

#!/bin/bash

PROXY="http://user:pass@residential.proxy.com:8080"
SITE_URL="https://yoursite.com"
LOG_FILE="uptime.log"

while true; do
    timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    
    http_code=$(curl -x "$PROXY" \
                     -s -o /dev/null \
                     -w "%{http_code}" \
                     --max-time 10 \
                     "$SITE_URL")
    
    if [ "$http_code" -eq 200 ]; then
        echo "[$timestamp] OK - HTTP $http_code" >> "$LOG_FILE"
    else
        echo "[$timestamp] ERROR - HTTP $http_code" >> "$LOG_FILE"
        # ارسال هشدار (به عنوان مثال، از طریق API تلگرام)
        curl -s "https://api.telegram.org/botTOKEN/sendMessage" \
             -d "chat_id=CHAT_ID&text=وب‌سایت در دسترس نیست: HTTP $http_code"
    fi
    
    sleep 300  # 5 دقیقه
done

نتیجه‌گیری

Curl و wget ابزارهای قدرتمندی برای اتوماسیون درخواست‌های HTTP هستند و تنظیم صحیح پروکسی آن‌ها را برای پارس کردن، نظارت و آزمایش ضروری می‌سازد. ما تمام جنبه‌های کلیدی را بررسی کردیم: از سینتکس پایه‌ای تا سناریوهای پیشرفته با چرخش IP، پردازش خطاها و تصادفی‌سازی هدرها.

نکات اصلی مقاله:

  • از پارامتر -x در curl و متغیرهای محیطی برای تنظیم پروکسی استفاده کنید
  • نوع پروکسی را بر اساس وظیفه انتخاب کنید: HTTP برای درخواست‌های ساده، SOCKS5 برای عمومی بودن
  • همیشه User-Agent استاندارد را با یک مرورگر واقعی جایگزین کنید
  • چرخش پروکسی را برای پارس کردن در مقیاس بزرگ پیاده‌سازی کنید — این برای دور زدن مسدودیت‌ها حیاتی است
  • پردازش خطاها و تایم‌اوت‌ها را در اسکریپت‌های تولیدی اضافه کنید
  • بین درخواست‌ها وقفه‌های تصادفی اضافه کنید تا رفتار انسانی را شبیه‌سازی کنید

برای وظایفی که نیاز به سطح بالایی از ناشناسی و حداقل خطر مسدودیت دارند (پارس کردن بازارها، بررسی تبلیغات، نظارت بر رقبا)، توصیه می‌شود از پروکسی‌های مسکونی استفاده کنید. آن‌ها IP کاربران واقعی را دارند که درخواست‌های شما را از ترافیک عادی غیرقابل تشخیص می‌سازد و احتمال قرار گرفتن در لیست‌های مسدودیت را به‌طور قابل توجهی کاهش می‌دهد.

اکنون شما مجموعه کاملی از ابزارها و دانش را برای کار مؤثر با پروکسی در curl و wget دارید. این تکنیک‌ها را در پروژه‌های خود به کار ببرید، مثال‌ها را برای وظایف خاص خود تطبیق دهید و اتوماسیون را بدون ترس از مسدودیت‌ها گسترش دهید.

```