HTTP پروکسی کے ذریعے جانے والی HTTPS درخواست کو CONNECT قبول کرنے والا ایک جواب اور بعد میں اسی سرنگ کے اندر ویب سائٹ سے ایک اور جواب مل سکتا ہے۔ ابتدائی روٹ سیٹ اپ کے لیے Guzzle کا فی درخواست پروکسی آپشن دیکھیں۔ پہلے جواب کا کوئی ہیڈر آخری جوابی آبجیکٹ میں ہونا ضروری نہیں۔

اپنی پسند کے HTTP اینڈ پوائنٹ کے ساتھ دوبارہ تولید کے لیے HTTP پروکسی فہرست سے ایک امیدوار لیں اور تصدیق کریں کہ وہ HTTPS سرنگ قبول کرتا ہے۔ Guzzle 7.10 کے cURL ہینڈلر راستے کے لیے ہر header callback کو الگ بلاک کے طور پر محفوظ رکھیں:

$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 کے header callback تک پہنچ سکتے ہیں۔ Guzzle 7.10 ہینڈلر ہر مکمل ہیڈر بلاک کے لیے ایک جواب بناتا ہے اور اسی حد پر on_headers کال کرتا ہے۔

بلاکس کو ترتیب میں رکھیں۔ توثیقی چیلنجز، ری ڈائریکٹ اور معلوماتی جوابات اضافی بلاکس بنا سکتے ہیں؛ تمام اقدار کو ایک array میں ہموار نہ کریں اور کسی جواب کو صرف اس بنا پر درجہ بند نہ کریں کہ اس کا اسٹیٹس 200 ہے۔

واپس کیا گیا جواب مکمل شدہ درخواست کے جواب کی نمائندگی کرتا ہے، جبکہ blocks ان مشاہدات کو محفوظ رکھتا ہے جو callbacks نے جمع کیے۔ اگر سرنگ یا TLS سیٹ اپ ناکام ہو تو پھینکا گیا transfer exception کال کرنے والی ایپلیکیشن میں سنبھالیں؛ ہو سکتا ہے آخری ویب سائٹ جواب موجود نہ ہو۔

یہ رویہ بیان کردہ cURL ہینڈلر سے وابستہ ہے۔ حسب ضرورت یا stream ہینڈلر پر وہی proxy-handshake callbacks فراہم کرنا لازم نہیں۔ محفوظ کیے گئے پروکسی ہیڈرز کو تشخیصی ڈیٹا سمجھیں اور اکاؤنٹ سے جڑی اقدار کو غیر ضروری طور پر برقرار نہ رکھیں۔

متعلقہ مضامین