cURL প্রক্সি ব্যবহার পদ্ধতি, HTTP এবং SOCKS5 প্রক্সি কমান্ড লাইনে নিশ্চিত করা
এই গাইডে cURL দিয়ে Socks5Proxy-এর HTTP ও SOCKS5 প্রোক্সি সংযোগ, username/password অথেন্টিকেশন, রেসপন্স টাইম মাপা, তালিকা একসাথে চেক করার শেল স্ক্রিপ্ট বর্ণনা করা হয়েছে।
cURL দিয়ে প্রক্সি টেস্ট করলে ভাল কেন?
cURL প্রায় সব সার্ভার এবং ডেভেলপমেন্ট এনভায়রনমেন্টে ইনস্টল করা থাকে তাই প্রক্সি সঠিকভাবে কাজ করছে কিনা দ্রুত নিশ্চিত করা যায়। কোড বা ব্রাউজার সেটিং এ সমস্যা হলে cURL দিয়ে একই লাইন টেস্ট করলে প্রক্সি সমস্যা নাকি কোড সমস্যা তা আলাদা করা যায়।
উদাহরণে IP 198.51.100.23, HTTP পোর্ট 8000, SOCKS5 পোর্ট 1080, ইউজারনেম spx_user, পাসওয়ার্ড spx_pass ব্যবহার করা হয়।
HTTP প্রোক্সি কিভাবে সংযুক্ত করবো?
-x (বা --proxy) অপশনে প্রোক্সি ঠিকানা ব্যবহার করুন। ইউজারনেম এবং পাসওয়ার্ড ঠিকানার মধ্যে বা -U অপশন ব্যবহার করে আলাদাভাবে দেওয়া যায়। HTTPS ঠিকানা রিকোয়েস্ট করলে cURL CONNECT ব্যবহার করে টানেল তৈরি করে এবং তার মধ্যে এনক্রিপ্টেড রিকোয়েস্ট করে।
# user and password inside the proxy URL
curl -x http://spx_user:spx_pass@198.51.100.23:8000 https://api.ipify.org
# or with -U
curl -x http://198.51.100.23:8000 -U spx_user:spx_pass https://api.ipify.orgSOCKS5 প্রোক্সি কিভাবে কানেক্ট করবো?
--socks5-hostname ডোমেইন নাম রেজোলিউশন প্রোক্সি থেকে করে। আপনার সার্ভারের DNS রিকোয়েস্ট বাইরে প্রকাশ হয় না এবং প্রোক্সি যে দেশে আছে সেই দেশের ভিত্তিতে নাম রেজোলিউশন হয়। --socks5 নাম রেজোলিউশন আপনার সার্ভার থেকে করে এবং শুধুমাত্র IP প্রোক্সিতে পাঠায়। বেশিরভাগ ক্ষেত্রে --socks5-hostname সুপারিশ করা হয়।
ঠিকানা ফরম্যাট socks5h:// -x এ দিলেও একই ফলাফল পাওয়া যায়।
# DNS is resolved by the proxy
curl --socks5-hostname 198.51.100.23:1080 --proxy-user spx_user:spx_pass https://api.ipify.org
# same thing with a proxy URL
curl -x socks5h://spx_user:spx_pass@198.51.100.23:1080 https://api.ipify.orgরেসপন্স টাইম ও স্টেটস একসাথে দেখতে চাইলে কী করবেন?
-w অপশন ব্যবহার করে সংযোগ সময়, প্রথম বাইট পর্যন্ত সময়, সম্পূর্ণ সময় এবং রেসপন্স কোড এক লাইনে আউটপুট করা যায়। বিভিন্ন দেশের প্রোক্সির গতি তুলনা করতে বা টার্গেট সাইট ধীর নাকি প্রোক্সি ধীর তা আলাদা করতে এটি দরকারী।
-o /dev/null ব্যবহার করে বডি ডিসকার্ড করুন এবং -s ব্যবহার করে প্রোগ্রেস ইনডিকেটর বন্ধ করুন, ফলে ফলাফল পরিষ্কারভাবে দেখা যাবে।
curl -s -o /dev/null \
-x http://spx_user:spx_pass@198.51.100.23:8000 \
-w "code=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
https://example.com/তালিকার সমস্ত অংশ একসাথে যাচাই করতে চাইলে কী করতে হবে?
API দিয়ে তালিকা নিয়ে প্রতি লাইনে cURL চালালে সব প্রোক্সির অবস্থা একবারে চেক করা যায়। নিচের স্ক্রিপ্টটি ip:port:user:pass ফরম্যাট তালিকা নিয়ে প্রতি লাইনের রেসপন্স IP এবং সময় প্রিন্ট করে। সময় সীমা দিয়ে রেসপন্স না পাওয়া লাইনে আটকে না গিয়ে চালানো হয়।
#!/bin/sh
KEY="YOUR_API_KEY"
curl -s -H "Authorization: Bearer $KEY" \
"https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http" > proxies.txt
while IFS=: read -r ip port user pass; do
out=$(curl -s -m 15 -x "http://$user:$pass@$ip:$port" -w " %{time_total}s" https://api.ipify.org)
echo "$ip:$port $out"
done < proxies.txtAPI নিজেও cURL দিয়ে কল করা যায়?
হ্যাঁ। ব্যালেন্স চেক, অ্যাক্টিভ প্ল্যান তালিকা, প্রোক্সি তালিকা সব Authorization: Bearer হেডার দিয়ে কল করা যায়। JSON রেস্পন্স jq-র মতো টুল দিয়ে প্রয়োজনীয় ফিল্ড বাছাই করা যায়।
curl -H "Authorization: Bearer YOUR_API_KEY" https://socks5proxy.io/api/v1/account
curl -H "Authorization: Bearer YOUR_API_KEY" "https://socks5proxy.io/api/v1/proxies?country=us&protocol=socks5"এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে প্রোক্সি সেট করা সম্ভব?
হ্যাঁ। cURL ও অনেক কমান্ড লাইন টুল http_proxy, https_proxy, all_proxy এনভায়রনমেন্ট ভেরিয়েবল পড়ে। শেলে একবার সেট করে রাখলে সেই শেলে চলা cURL, wget, pip সব একই প্রোক্সি ব্যবহার করে। SOCKS5-এর জন্য all_proxy-তে socks5h:// এড্রেস দিতে হয়।
প্রক্সি মাধ্যমে যাওয়া উচিত নয় এমন ঠিকানা no_proxy তে কমা দিয়ে লিখে রাখুন। অভ্যন্তরীণ সার্ভার বা localhost পর্যন্ত প্রক্সি মাধ্যমে যাওয়া বন্ধ করতে পারবেন।
export https_proxy="http://spx_user:spx_pass@198.51.100.23:8000"
export http_proxy="$https_proxy"
export no_proxy="localhost,127.0.0.1"
curl https://api.ipify.org
# SOCKS5 for every tool that reads all_proxy
export all_proxy="socks5h://spx_user:spx_pass@198.51.100.23:1080"HTTP প্রোক্সি এবং SOCKS5 প্রোক্সি রেজাল্ট তুলনা করতে চাইলে কি করবো?
একই IP এর দুই পোর্ট দিয়ে একই অ্যাড্রেসে রিকুয়েস্ট পাঠিয়ে রেসপন্স IP এবং সময় তুলনা করলে আপনার এনভায়রনমেন্টে কোন মেথড দ্রুততর তা বোঝা যাবে। বেশিরভাগ ক্ষেত্রে একই থাকে, কিন্তু টার্গেট সার্ভার দূরে থাকলে বা DNS রেজোলিউশন স্লো হলে পার্থক্য হতে পারে।
রেসপন্স IP দুটি পদ্ধতিতে একই হওয়া উচিত। ভিন্ন হলে অন্য লাইনের পোর্ট মিক্সড ব্যবহার হয়েছে, তাই তালিকা আবার চেক করুন।
for p in "http://spx_user:spx_pass@198.51.100.23:8000" "socks5h://spx_user:spx_pass@198.51.100.23:1080"; do
curl -s -m 15 -x "$p" -w " %{time_total}s\n" https://api.ipify.org
doneসার্ভার থেকে আইপি অথোরাইজেশনের জন্য আইপি যাচাই করতে কী করতে হবে?
IP অনুমোদনে নিবন্ধন করার মান হল আপনার সার্ভার ইন্টারনেটে যাওয়ার সময় ব্যবহার করা পাবলিক IPv4। প্রক্সি ছাড়া curl -4 https://api.ipify.org চালালে সেই মানটি সরাসরি দেখতে পাবেন। এই মানটি ড্যাশবোর্ডের IP অনুমোদন বক্সে নিবন্ধন করলে সেই সার্ভার থেকে ব্যবহারকারীর নাম এবং পাসওয়ার্ড ছাড়াই সংযোগ করা যাবে।
curl -4 -s https://api.ipify.orgHTTPS সাইটে প্রোক্সি ডেটা দেখতে পারে?
HTTP প্রোক্সি দিয়ে HTTPS ঠিকানা রিকোয়েস্ট করলে cURL প্রথমে CONNECT দিয়ে টার্গেট সার্ভার পর্যন্ত টানেল তৈরি করে এবং তার মধ্যে টার্গেট সার্ভারের সাথে এনক্রিপ্টেড কানেকশন স্থাপন করে। প্রোক্সি শুধু কোন সার্ভারে সংযুক্ত হচ্ছে তা জানে, যাওয়া-আসা ডেটা এনক্রিপ্টেড থাকে। -v অপশন দিয়ে রান করলে CONNECT ধাপ এবং তার পরের এনক্রিপ্টেড কানেকশন প্রসেস ধাপে ধাপে দেখা যায়।
SOCKS5-ও একই। প্রোক্সি শুধু কানেকশন ফরওয়ার্ড করে, এবং এনক্রিপশন cURL এবং টার্গেট সার্ভারের মধ্যে হয়। তাই সিকিউরিটি সার্টিফিকেট ভেরিফিকেশন অপশন (-k) ব্যবহার না করাই নিরাপদ। কারণ প্রোক্সি ব্যবহার করলেও টার্গেট সার্ভারের সার্টিফিকেট যাচাই হয়।
--socks5-hostname ব্যবহার করলে সংযোগ করার ডোমেইন নামও প্রোক্সি দ্বারা রেজোলিউশন হয়, তাই আপনার সার্ভারের DNS রিকোয়েস্ট লগেও এটি দেখা যায় না।
curl -v -o /dev/null -x http://spx_user:spx_pass@198.51.100.23:8000 https://example.com/ 2>&1 | grep -E "CONNECT|HTTP/|SSL connection"cURL এরর মেসেজ কিভাবে পড়ব?
Received HTTP code 407 from proxy after CONNECT মানে অথেন্টিকেশন ফেইল। ইউজারনেম-পাসওয়ার্ড, অথবা IP অথোরাইজেশনে রেজিস্টার্ড সার্ভার IP চেক করুন। পাসওয়ার্ডে @ বা : থাকলে অ্যাড্রেসের ভিতরে দেবেন না, -U বা --proxy-user দিয়ে দিন।
Failed to connect বা Connection timed out সাধারণত পোর্ট মিল না হলে বা সার্ভারের ফায়ারওয়াল আউটগোয়িং কানেকশন ব্লক করলে হয়। HTTP ঠিকানায় HTTP পোর্ট এবং SOCKS5 ঠিকানায় SOCKS5 পোর্ট ব্যবহার করুন এবং আউটগোয়িং পোর্ট খোলা আছে কিনা চেক করুন। -v অপশন দিয়ে কানেকশন প্রসেস ধাপে ধাপে দেখা যায়, যা কারণ খুঁজে পেতে সাহায্য করে।