प्रॉक्सी के साथ cURL का उपयोग कैसे करें: HTTP, HTTPS और SOCKS5 उदाहरण
Scraping and Proxy Management Expert
TL;DR:
-xया--proxyका उपयोग करें ताकि cURL अनुरोध को HTTP, HTTPS, या SOCKS प्रॉक्सी के माध्यम से रूट किया जा सके। लक्षित URL को प्रॉक्सी पते से अलग रखें।- एक HTTPS लक्ष्य को HTTPS प्रॉक्सी की आवश्यकता नहीं है। एक HTTP प्रॉक्सी आमतौर पर HTTPS गंतव्य के लिए एक CONNECT टनल बनाता है; एक
https://प्रॉक्सी URL अतिरिक्त रूप से क्लाइंट-से-प्रॉक्सी हॉप को एन्क्रिप्ट करता है। socks5h://का उपयोग करें जब प्रॉक्सी को लक्ष्यhostname का समाधान करना चाहिए। सामान्यsocks5://इसे स्थानीय रूप से हल करता है, जो DNS व्यवहार को उजागर कर सकता है या प्रॉक्सी-केवल hostname पर विफल हो सकता है।- URLs और स्रोत फ़ाइलों से क्रेडेंशियल्स को बाहर रखें। शेल चर को उद्धृत करें, कॉन्फ़िग फ़ाइलों की सुरक्षा करें, और कभी भी वास्तविक उपयोगकर्ता नाम, पासवर्ड, या गेटवे टोकन प्रकाशित न करें।
- निर्गम IP से अधिक की जांच करें। स्थिति, अपेक्षित सामग्री, स्थान, DNS व्यवहार, और अधिकृत लक्ष्य पर प्रॉक्सी-नियंत्रण अनुरोध की जाँच करें।
cURL प्रॉक्सी समर्थन उस कमांड में बना हुआ है जिसका अधिकांश डेवलपर्स पहले से HTTP डायग्नोस्टिक्स के लिए उपयोग करते हैं। एकल विकल्प HTTP गेटवे, HTTPS प्रॉक्सी, या SOCKS5 सर्वर के माध्यम से अनुरोध को रूट कर सकता है, जब आवश्यक हो तो प्रमाणीकरण और होस्ट-बहिष्करण नियमों के साथ।
विधि सरल है। नेटवर्क व्यवहार नहीं है। HTTPS लक्ष्य टनलों का उपयोग करते हैं, SOCKS योजनाएँ निर्णय करती हैं कि DNS समाधान कहाँ होता है, पर्यावरण चर केस के अनुसार भिन्न होते हैं, और क्रेडेंशियल्स असावधान कमांड इतिहास के माध्यम से लीक हो सकते हैं।
यह गाइड एक न्यूनतम कमांड से शुरू होती है और एक ऐसे कॉन्फ़िगरेशन का निर्माण करती है जो macOS, Linux, और Windows पर काम करता है।
Quick cURL Proxy Example
एक अधिकृत सार्वजनिक परीक्षण लक्ष्य और एक प्रॉक्सी का उपयोग करें जो आपके पास नियंत्रण में है या जिसका उपयोग करने की अनुमति है:
bash
curl --proxy "http://proxy.example.com:8080" \
--connect-timeout 10 \
--max-time 30 \
--show-error \
"https://example.com/"
लंबा विकल्प --proxy और छोटा विकल्प -x समान हैं। cURL कमांड-लाइन संदर्भ समर्थित प्रॉक्सी योजनाओं, प्रमाणीकरण विकल्पों, और बहिष्करण व्यवहार का दस्तावेजीकरण करता है।
जांच के दौरान --verbose जोड़ें ताकि कनेक्शन अनुक्रम देख सकें। सामान्य लॉग से विस्तृत आउटपुट हटा दें क्योंकि हेडर और कनेक्शन विवरण संवेदनशील हो सकते हैं।
How cURL Proxy URLs Work
प्रॉक्सी विकल्प एक योजना, होस्ट, और पोर्ट स्वीकार करता है:
योजना://प्रॉक्सी-होस्ट:पोर्ट
सामान्य योजनाएँ हैं:
http://एक HTTP प्रॉक्सी के लिए;https://cURL और प्रॉक्सी के बीच TLS के लिए;socks4://औरsocks4a://SOCKS4 रूपांतरों के लिए;socks5://SOCKS5 के लिए जो स्थानीय लक्ष्य-नाम समाधान करता है;socks5h://SOCKS5 के लिए जो प्रॉक्सी-साइड लक्ष्य-नाम समाधान करता है।
लक्षित URL अंतिम तर्क बना रहता है। लक्ष्य और प्रॉक्सी को एक URL में संयोजित न करें।
Use an HTTP Proxy With cURL
एक सामान्य HTTP लक्ष्य के लिए, cURL अनुरोध को प्रॉक्सी के माध्यम से भेजता है। एक HTTPS लक्ष्य के लिए, यह सामान्यतः HTTP CONNECT विधि के साथ टनल खोलने के लिए प्रॉक्सी से पूछता है और फिर उस टनल के माध्यम से गंतव्य के साथ TLS करता है।
bash
# HTTP target through an HTTP proxy
curl -x "http://proxy.example.com:8080" "http://example.com/"
# HTTPS target through the same HTTP proxy
curl -x "http://proxy.example.com:8080" "https://example.com/"
दूसरा कमांड अभी भी गंतव्य TLS के साथ HTTP अनुरोध और प्रतिक्रिया की सुरक्षा करता है। टनल स्थापित होने से पहले क्लाइंट-से-प्रॉक्सी कनेक्शन स्वयं को अलग से एन्क्रिप्ट नहीं किया जाता है, इसलिए स्थानीय नेटवर्क पर्यवेक्षक प्रॉक्सी कनेक्शन और टनल गंतव्य मेटाडेटा देख सकते हैं।
HTTP Semantics specification CONNECT विधि को परिभाषित करता है जिसका उपयोग एक टनल स्थापित करने के लिए किया जाता है।
Use an HTTPS Proxy With cURL
एक HTTPS प्रॉक्सी cURL से प्रॉक्सी तक की यात्रा को एन्क्रिप्ट करता है। प्रॉक्सी URL को https:// के साथ उपसर्गित करें:
bash
curl --proxy "https://proxy.example.com:8443" \
--proxy-cacert "/path/to/proxy-ca.pem" \
"https://example.com/"
--proxy-cacert उस CA बंडल को प्रदान करता है जिससे प्रॉक्सी के प्रमाणपत्र की जांच की जा सके जब डिफ़ॉल्ट ट्रस्ट स्टोर में जारी करने वाली CA नहीं होती है। --proxy-insecure का स्थायी समाधान के रूप में उपयोग न करें; यह प्रॉक्सी प्रमाणपत्र सत्यापन को अक्षम कर देता है।
हर प्रॉक्सी एंडपॉइंट TLS स्वीकार नहीं करता। प्रदाता के दस्तावेज़ीकरण से URL योजना और पोर्ट को मिलाएँ।
Use a SOCKS5 Proxy With cURL
SOCKS प्रॉक्सी HTTP के नीचे काम करते हैं और कई एप्लिकेशन प्रोटोकॉल ले जा सकते हैं। वेब अनुरोधों के लिए, महत्वपूर्ण विकल्प यह है कि लक्ष्य hostname कहाँ हल किया जाता है।
bash
# Resolve example.com on the local machine
curl --proxy "socks5://proxy.example.com:1080" "https://example.com/"
# Send example.com to the proxy for resolution
curl --proxy "socks5h://proxy.example.com:1080" "https://example.com/"
# Equivalent long option for proxy-side hostname resolution
curl --socks5-hostname "proxy.example.com:1080" "https://example.com/"
जब लक्ष्य hostname को स्थानीय समाधानकर्ता द्वारा हल नहीं किया जाना चाहिए, जब hostname केवल प्रॉक्सी नेटवर्क से दिखाई देता है, या जब स्थानीय DNS गलत क्षेत्रीय परिणाम देता है, तब socks5h:// का उपयोग करें।
Everything cURL SOCKS guide स्थानीय बनाम प्रॉक्सी नाम-समाधान अंतर को स्पष्ट करती है। प्रोटोकॉल स्वयं RFC 1928 में परिभाषित है।
Authenticate to a Proxy Safely
प्रॉक्सी URL में क्रेडेंशियल्स को एम्बेड करने के बजाय --proxy-user या -U का उपयोग करें:
bash
export PROXY_HOST="proxy.example.com"
export PROXY_PORT="8080"
export PROXY_USER="replace-with-user"
read -r -s -p "Proxy password: " PROXY_PASS
printf '\n'
curl --proxy "http://${PROXY_HOST}:${PROXY_PORT}" \
--proxy-user "${PROXY_USER}:${PROXY_PASS}" \
"https://example.com/"
unset PROXY_PASS
उद्धरण स्पेस, डॉलर संकेत, उत्तेजन चिह्न, और अन्य शेल वर्णों को पुनः अर्थ लगाने से रोकता है। साझा शेल कमांड, टिकट, स्क्रीनशॉट, या भंडार में सीधे वास्तविक पासवर्ड न टाइप करें।
कमांड-लाइन तर्क स्थानीय प्रक्रिया निरीक्षण के लिए दृश्य हो सकते हैं। स्वचालन के लिए, एक गुप्त प्रबंधक का उपयोग करना पसंद करें जो एक अलग कार्य में एक अल्पकालिक मान डालता है। यदि आप एक cURL कॉन्फ़िग फ़ाइल का उपयोग करते हैं, तो इसकी अनुमतियों को सीमित करें और इसे संस्करण नियंत्रण के बाहर रखें:
text
proxy = "http://proxy.example.com:8080"
proxy-user = "replace-with-user:replace-with-password"
connect-timeout = 10
max-time = 30
show-error
macOS या Linux पर, अनुमतियों को सेट करें chmod 600 proxy.conf, फिर curl --config proxy.conf https://example.com/ चलाएँ। यदि फ़ाइल का प्रदर्शन किया जाता है, तो क्रेडेंशियल को हटा दें या घुमाएँ।
प्रॉक्सी पर्यावरण वेरिएबल सेट करें
cURL उन अनुप्रयोगों के लिए पर्यावरण वेरिएबलों को पहचानता है जिन्हें प्रॉक्सी राउटिंग साझा करनी चाहिए:
bash
export http_proxy="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export ALL_PROXY="socks5h://proxy.example.com:1080"
export NO_PROXY="localhost,127.0.0.1,.internal.example.com"
curl "https://example.com/"
निम्नलिखित छोटे अक्षर http_proxy रूप जानबूझकर है। cURL केवल उस वेरिएबल के लिए छोटे अक्षर स्वीकार करता है क्योंकि यह एक सुरक्षा उचितता है, जबकि अन्य प्रॉक्सी वेरिएबल बड़े अक्षर हो सकते हैं। ALL_PROXY एक बैकअप के रूप में कार्य करता है; प्रोटोकॉल-विशिष्ट वेरिएबल्स को प्राथमिकता दी जाती है।
The Everything cURL environment-variable guide केस नियमों और NO_PROXY मेल को प्रलेखित करता है।
संगठित कार्यों के लिए पर्यावरण वेरिएबल्स का उपयोग करें, न कि एक वैश्विक डेस्कटॉप सेटिंग के रूप में जिसे आप भूल जाएँ कि यह सक्रिय है। जब कोई अनुरोध अप्रत्याशित रूप से प्रॉक्सी का उपयोग करता है तो उन्हें निरीक्षण करें।
प्रॉक्सी राउटिंग से चयनित होस्ट को बाहर करें
एक आदेश के लिए --noproxy का उपयोग करें:
bash
curl --proxy "http://proxy.example.com:8080" \
--noproxy "localhost,127.0.0.1,.internal.example.com" \
"https://internal.example.com/health"
एक सटीक होस्टनेम उस होस्ट से मेल खाता है। एक डॉट से शुरू होने वाला डोमेन डोमेन और इसके उपडोमेन से मेल खाता है। एक तारांकित सभी होस्टों के लिए प्रॉक्सी को अक्षम करता है, जो केवल निदान के लिए उपयोगी है।
बाहर करने की सूचियों को नीति के रूप में मानें। एक व्यापक उपसर्ग संवेदनशील या आंतरिक गंतव्यों को इच्छित गेटवे के बाहर रौंद सकता है।
Windows पर cURL प्रॉक्सी कॉन्फ़िगर करें
cURL विकल्प खुद क्रॉस-प्लेटफ़ॉर्म हैं। केवल पर्यावरण और उद्धरण सिंटैक्स बदलता है।
PowerShell में:
powershell
$env:http_proxy = "http://proxy.example.com:8080"
$env:HTTPS_PROXY = "http://proxy.example.com:8080"
$env:NO_PROXY = "localhost,127.0.0.1,.internal.example.com"
curl.exe --proxy "http://proxy.example.com:8080" `
--proxy-user "replace-with-user:replace-with-password" `
--show-error `
"https://example.com/"
Remove-Item Env:http_proxy, Env:HTTPS_PROXY, Env:NO_PROXY
Windows PowerShell वातावरण में curl.exe का उपयोग करें जहाँ curl किसी अन्य कमांड के रूप में हल हो सकता है। कमांड प्रॉम्प्ट में, वेरिएबल्स %NAME% का उपयोग करते हैं; दोहराने योग्य स्वचालन के लिए, PowerShell या एक सुरक्षित cURL कॉन्फ़िग फ़ाइल को पसंद करें।
प्रॉक्सी निकासी IP सुनिश्चित करें
पहले एक प्रत्यक्ष नियंत्रण प्रतिक्रिया रिकॉर्ड करें, फिर प्रॉक्सी के माध्यम से वही अनुरोध करें:
bash
curl --silent --show-error "https://httpbin.org/ip"
curl --silent --show-error \
--proxy "http://proxy.example.com:8080" \
"https://httpbin.org/ip"
विभिन्न IP मान दिखाते हैं कि राउटिंग बदल गई। वे अनुरोधित देश, सत्र व्यवहार, गुमनामी स्तर, या लक्षित-पृष्ठ सफलता को साबित नहीं करते हैं।
एक वास्तविक स्वीकृति परीक्षण के लिए, निम्नलिखित सभी की जाँच करें:
- cURL सफलतापूर्वक निकले;
- HTTP स्थिति अपेक्षित है;
- शरीर में एक आवश्यक मार्कर है;
- निकासी IP या क्षेत्र कार्य नीति को पूरा करता है;
- DNS समाधान इच्छित पक्ष पर होता है;
- कोई अप्रूव्ड होस्ट विस्तृत कनेक्शन आउटपुट में नहीं दिखाई देता।
आप स्टेटस और रिमोट पीयर पते को बिना शरीर को संचित किए प्रिंट कर सकते हैं:
bash
curl --output /dev/null --silent --show-error \
--write-out 'status=%{http_code} peer=%{remote_ip}\n' \
--proxy "http://proxy.example.com:8080" \
"https://example.com/"
सामान्य cURL प्रॉक्सी त्रुटियाँ
407 Proxy Authentication Required
प्रॉक्सी ने प्रदान किए गए क्रेडेंशियल्स को स्वीकार नहीं किया या खाता/चैनल अनुरोध को सेवा नहीं दे सकता। उपयोगकर्ता नाम प्रारूप, पासवर्ड, चैनल की स्थिति, और अनुमत प्रमाणीकरण विधि की पुष्टि करें। लक्षित-साइट 401 त्रुटियों को प्रॉक्सी 407 त्रुटियों से अलग रखें।
कनेक्शन समय सीमा समाप्त हुई
प्रॉक्सी होस्टनेम, पोर्ट, फ़ायरवॉल, VPN संघर्षों की जाँच करें, और यह कि क्या अंतिम बिंदु HTTP, HTTPS, या SOCKS की अपेक्षा करता है। कनेक्शन सेटअप को सीमित करने के लिए --connect-timeout का उपयोग करें और समग्र संचालन को सीमित करने के लिए --max-time का उपयोग करें।
प्रॉक्सी प्रमाणपत्र त्रुटि
HTTPS प्रॉक्सी के लिए, सुनिश्चित करें कि प्रॉक्सी होस्टनेम इसका प्रमाणपत्र से मेल खाता है और सही CA विश्वसनीय है। एक गंतव्य CA विकल्प और एक प्रॉक्सी CA विकल्प विभिन्न TLS कनेक्शनों की सुरक्षा करते हैं।
Could not resolve host
यदि संदेश लक्ष्य का नाम लेते हुए socks5:// का उपयोग करता है, तो प्रॉक्सी-साइड DNS का इरादा होने पर socks5h:// पर स्विच करें। यदि यह प्रॉक्सी का नाम लेता है, तो स्थानीय DNS या प्रॉक्सी होस्टनेम को ठीक करें।
प्रत्यक्ष अनुरोध कार्य करता है लेकिन प्रॉक्सी अनुरोध विफल होता है
विस्तृत आउटपुट, लक्षित नीति, प्रॉक्सी स्थान, प्रोटोकॉल, और शरीर मार्कर की तुलना करें। एक निकासी IP अंतिम बिंदु काम कर सकता है जबकि वास्तविक लक्ष्य ट्रैफ़िक को अस्वीकार करता है, इसलिए हमेशा अनुमत उत्पादन होस्टनेम को अलग से परीक्षण करें।
cURL का उपयोग Scrapeless प्रॉक्सी के साथ करें
The Scrapeless Proxy Solutions product page आवासीय, डेटासेंटर, स्थिर ISP, और IPv6 विकल्पों को कवर करता है। Scrapeless डैशबोर्ड में एक चैनल बनाएं, फिर उत्पन्न गेटवे, उपयोगकर्ता नाम, और पासवर्ड की कॉपी करें। उपयोगकर्ता नाम प्रारूप का आविष्कार न करें; इसमें प्रॉक्सी प्रकार, स्थान, और उस चैनल के लिए चुने गए सत्र पैरामीटर शामिल हो सकते हैं।
उत्पन्न मानों को संरक्षित वेरिएबल्स के रूप में सेट करें:
bash
export SCRAPELESS_PROXY_HOST="gw-us.scrapeless.io"
export SCRAPELESS_PROXY_PORT="8789"
export SCRAPELESS_PROXY_USER="replace-with-generated-username"
read -r -s -p "Scrapeless proxy password: " SCRAPELESS_PROXY_PASS
printf '\n'
curl --proxy "http://${SCRAPELESS_PROXY_HOST}:${SCRAPELESS_PROXY_PORT}" \
--proxy-user "${SCRAPELESS_PROXY_USER}:${SCRAPELESS_PROXY_PASS}" \
--connect-timeout 10 \
--max-time 30 \
--show-error \
"https://httpbin.org/ip"
unset SCRAPELESS_PROXY_PASS
ऊपर दिया गया गेटवे एक वर्तमान प्रलेखित अमेरिकी अंतिम बिंदु है; डैशबोर्ड या वर्तमान प्रलेखन से अपने अनुप्रयोग के निकटतम अंतिम बिंदु का चयन करें। निकासी भूगोल को उत्पन्न उपयोगकर्ता नाम पैरामीटर के माध्यम से अलग से नियंत्रित किया जाता है।
Scrapeless प्रॉक्सी सेटअप गाइड का पालन करें यहाँ एक चैनल बनाने के लिए, फिर वर्तमान गेटवे और स्थान क्षेत्रों के लिए प्रॉक्सी फीचर संदर्भ का उपयोग करें।
यदि आप पते के प्रकारों के बीच चयन कर रहे हैं, तो डेटासेंटर बनाम रेजिडेंशियल प्रॉक्सी गाइड संचालन के व्यापारिक मूल्यांकन की व्याख्या करता है। वर्तमान शर्तों के लिए Scrapeless मूल्य निर्धारण की समीक्षा करें।
cURL प्रॉक्सी चेकलिस्ट
- सुनिश्चित करें कि लक्ष्य और प्रॉक्सी कार्य के लिए अधिकृत हैं।
- प्रॉक्सी URL स्कीम को प्रदाता के एंडपॉइंट से मिलाएं।
- प्रॉक्सी-साइड DNS की आवश्यकता होने पर
socks5h://का उपयोग करें। - क्रेडेंशियल्स को URLs, प्रॉम्प्ट्स, लॉग और रिपॉजिटरी के बाहर रखें।
- हर वैरिएबल को इसी वक्त में उद्धृत करें जो विशेष पात्रों को समाहित कर सकता है।
- बाउंड कनेक्शन और कुल समय रखें।
NO_PROXYया--noproxyको संकीर्ण रूप से सेट करें।- सीधे नियंत्रण की तुलना प्रॉक्सी प्रतिक्रिया के साथ करें।
- अपेक्षित सामग्री को मान्य करें, केवल निकासी IP नहीं।
- सामान्य लॉग से विस्तृत निदान को हटा दें।
एक Scrapeless प्रॉक्सी चैनल बनाएं और इसे पहले उस एक सार्वजनिक एंडपॉइंट के खिलाफ टेस्ट करें जिसे आपको एक्सेस करने की अनुमति है।
पूछे जाने वाले प्रश्न
प्रश्न: cURL प्रॉक्सी सिंटैक्स क्या है?
curl --proxy "scheme://host:port" "https://target.example.com/" का उपयोग करें। छोटा रूप curl -x "scheme://host:port" "https://target.example.com/" है।
प्रश्न: मैं प्रॉक्सी उपयोगकर्ता नाम और पासवर्ड कैसे जोड़ूं?
--proxy-user "username:password" का उपयोग करें और प्रॉक्सी URL से क्रेडेंशियल्स को बाहर रखें। स्वचालन में,protected secret store से मानों को इंजेक्ट करें।
प्रश्न: socks5:// और socks5h:// के बीच क्या अंतर है?
socks5:// के साथ, cURL स्थानीय रूप से लक्ष्य होस्टनाम को हल करता है। socks5h:// के साथ, SOCKS5 प्रॉक्सी इसे हल करता है।
प्रश्न: क्या मैं HTTPS वेबसाइट के लिए HTTP प्रॉक्सी का उपयोग कर सकता हूँ?
हाँ। cURL सामान्यतः HTTP प्रॉक्सी के माध्यम से एक सुरंग बनाने के लिए HTTP CONNECT का उपयोग करता है, फिर HTTPS गंतव्य के साथ TLS करता है।
प्रश्न: मैं एक होस्ट के लिए प्रॉक्सी को कैसे अक्षम करूं?
एक कमांड के लिए --noproxy "host.example" का उपयोग करें या होस्ट को NO_PROXY में जोड़ें। सूची को संकीर्ण रखें और डोमेन-सफिक्स मेलों की समीक्षा करें।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।



