libcurl easy handle पर एक स्पष्ट प्रॉक्सी लगाना
किसी विशेष प्रॉक्सी के लिए libcurl easy handle कॉन्फ़िगर करें और option त्रुटियों, transfer विफलताओं तथा HTTP स्थिति को अलग करें।
libcurl प्रॉक्सी कॉन्फ़िगरेशन को उस easy handle से जोड़ता है जो transfer करता है। उस handle पर मध्यस्थ का पता सेट करें, जबकि CURLOPT_URL गंतव्य URL ही रहने दें।
निम्न अंश मानता है कि libcurl आरंभ हो चुका है और handle एक वैध easy handle है:
char error[CURL_ERROR_SIZE] = {0};
CURLcode result;
result = curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, error);
if (result == CURLE_OK)
result = curl_easy_setopt(handle, CURLOPT_URL,
"https://example.com/");
if (result == CURLE_OK)
result = curl_easy_setopt(handle, CURLOPT_PROXY,
"http://proxy.example:8080");
if (result == CURLE_OK)
result = curl_easy_perform(handle);
if (result != CURLE_OK)
fprintf(stderr, "%s\n", error[0] ? error
: curl_easy_strerror(result));
जब तक handle उसका संदर्भ लेता है, त्रुटि बफ़र को जीवित रखें। उसका दायरा छोड़ने से पहले handle साफ़ करें या उसके CURLOPT_ERRORBUFFER संकेतक को बदलें या साफ़ करें। प्रॉक्सी का होस्टनाम प्लेसहोल्डर है; HTTP प्रॉक्सी सूची से एक अपुष्ट उम्मीदवार इस सार्वजनिक-साइट परीक्षण के लिए पता दे सकता है। इसकी वास्तविक स्कीम और पोर्ट का उपयोग करें, और जाँचें कि यह HTTPS सुरंग की अनुमति देता है या नहीं।
HTTPS गंतव्य HTTP प्रॉक्सी का उपयोग कर सकता है। libcurl उस HTTPS transfer के लिए सुरंग संभालता है। प्रॉक्सी option में http:// मध्यस्थ से कनेक्शन का वर्णन करता है। इसे https:// में बदलें केवल ऐसे प्रॉक्सी एंडपॉइंट के लिए जो वास्तव में TLS स्वीकार करता है और ऐसे libcurl बिल्ड के लिए जो इसका समर्थन करता है।
प्रभावी मार्ग को जानबूझकर बनाएँ
एक स्पष्ट प्रॉक्सी option संबंधित प्रॉक्सी पर्यावरण सेटिंग को ओवरराइड करता है। बायपास एक अलग निर्णय है: विरासत में मिला no_proxy अभी भी गंतव्य को बाहर रख सकता है। यदि इस handle को दिए गए हर गंतव्य के लिए चुना गया प्रॉक्सी उपयोग करना है, तो उस नीति के भाग के रूप में CURLOPT_NOPROXY को खाली स्ट्रिंग के रूप में कॉन्फ़िगर करें।
इसके विपरीत, CURLOPT_PROXY को खाली स्ट्रिंग पर सेट करना प्रॉक्सी उपयोग को स्पष्ट रूप से बंद करता है। इसे NULL पर सेट करना स्पष्ट असाइनमेंट हटाता है और पर्यावरण-आधारित व्यवहार फिर से अनुमत करता है। ये दो मान भिन्न उद्देश्यों की पूर्ति करते हैं।
Content-Type: text/xml जैसा लक्ष्य-विशिष्ट हेडर प्रॉक्सी नहीं चुनता। इसे केवल तब जोड़ें जब वास्तविक अनुरोध बॉडी और गंतव्य API को उस मीडिया प्रकार की आवश्यकता हो।
HTTP परिणाम भी पढ़ें
सफल curl_easy_perform का अर्थ यह नहीं कि वेबसाइट ने सफल HTTP स्थिति लौटाई। CURLINFO_RESPONSE_CODE पढ़ें और एप्लिकेशन की स्थिति-प्रबंधन लागू करें। प्रॉक्सी के CONNECT उत्तर का अपना मान है, CURLINFO_HTTP_CONNECTCODE; सुरंग अस्वीकृति किसी भी वेबसाइट उत्तर से पहले आती है।
CURLOPT_FAILONERROR कई HTTP त्रुटियों को विफलता मान सकता है, परंतु इसका दस्तावेज़ीकरण प्रमाणीकरण अपवादों का उल्लेख करता है। प्रॉक्सी की 407 चुनौती को गंतव्य की स्थिति से अलग रखें।