Guzzle का cURL हैंडलर: प्रॉक्सी CONNECT हेडर कैप्चर करें
जब प्रॉक्सी का CONNECT उत्तर और वेबसाइट का उत्तर दोनों महत्वपूर्ण हों, तो Guzzle के cURL हैंडलर से अलग-अलग उत्तर हेडर ब्लॉक कैप्चर करें।
HTTP प्रॉक्सी के माध्यम से जाने वाला HTTPS अनुरोध CONNECT स्वीकार करने वाला एक उत्तर और फिर उस टनल के भीतर वेबसाइट से आने वाला एक बाद का उत्तर प्राप्त कर सकता है। प्रारंभिक रूट सेटअप के लिए Guzzle का प्रति-अनुरोध प्रॉक्सी विकल्प देखें। पहले उत्तर का कोई हेडर अंतिम उत्तर ऑब्जेक्ट में होना आवश्यक नहीं है।
अपने द्वारा चुने गए HTTP एंडपॉइंट के साथ पुनरुत्पादन करने के लिए HTTP प्रॉक्सी सूची से एक उम्मीदवार लें और पुष्टि करें कि वह HTTPS टनल स्वीकार करता है। Guzzle 7.10 के cURL-हैंडलर पथ पर, प्रत्येक हेडर कॉलबैक को अलग ब्लॉक के रूप में रखें:
$blocks = [];
$client = new \GuzzleHttp\Client([
'handler' => \GuzzleHttp\HandlerStack::create(
new \GuzzleHttp\Handler\CurlHandler()
),
]);
$response = $client->get('https://www.example.com/', [
'proxy' => 'http://proxy.example:8080',
'curl' => [CURLOPT_SUPPRESS_CONNECT_HEADERS => false],
'on_headers' => function (
\Psr\Http\Message\ResponseInterface $part
) use (&$blocks) {
$blocks[] = [
'status' => $part->getStatusCode(),
'reason' => $part->getReasonPhrase(),
'headers' => $part->getHeaders(),
];
},
]);
cURL एक्सटेंशन को CURLOPT_SUPPRESS_CONNECT_HEADERS उपलब्ध कराना चाहिए, जो libcurl 7.54.0 द्वारा पेश किया गया विकल्प है। इसे false पर सेट करने से CONNECT हेडर cURL के हेडर कॉलबैक तक पहुँचते हैं। Guzzle 7.10 हैंडलर प्रत्येक पूर्ण हेडर ब्लॉक के लिए उत्तर बनाता है और उस सीमा पर on_headers कॉल करता है।
ब्लॉकों को क्रम में रखें। प्रमाणीकरण चुनौतियाँ, रीडायरेक्ट और सूचनात्मक उत्तर अतिरिक्त ब्लॉक उत्पन्न कर सकते हैं; सभी मानों को एक सरणी में समतल न करें और किसी उत्तर को केवल इसलिए वर्गीकृत न करें कि उसकी स्थिति 200 है।
लौटाया गया उत्तर पूर्ण हुए अनुरोध का उत्तर दर्शाता है, जबकि blocks कॉलबैक द्वारा एकत्र किए गए अवलोकनों को सुरक्षित रखता है। यदि टनल या TLS सेटअप विफल हो, तो कॉलिंग एप्लिकेशन में फेंके गए ट्रांसफर अपवाद को संभालें; अंतिम वेबसाइट उत्तर न भी हो।
यह व्यवहार बताए गए cURL हैंडलर से जुड़ा है। कस्टम या स्ट्रीम हैंडलर के लिए वही प्रॉक्सी-हैंडशेक कॉलबैक उपलब्ध कराना अनिवार्य नहीं है। कैप्चर किए गए प्रॉक्सी हेडर को निदान डेटा मानें और खाते से जुड़े मानों को अनावश्यक रूप से रखने से बचें।