یک درخواست HTTPS از طریق پروکسی HTTP می‌تواند یک پاسخ دریافت کند که CONNECT را می‌پذیرد و سپس پاسخی دیرتر از وب‌سایت درون آن تونل. برای راه‌اندازی اولیه مسیر، گزینه پروکسی گازل برای هر درخواست را ببینید. هدری که در پاسخ اول وجود دارد لزوماً در شیء پاسخ نهایی نیست.

برای بازتولید با یک نقطه پایانی HTTP که خودتان انتخاب می‌کنید، یک نامزد از فهرست پروکسی‌های HTTP بردارید و تأیید کنید که تونل HTTPS را می‌پذیرد. در مسیر هندلر cURL گازل 7.10، هر فراخوان بازگشتی هدرها را به‌صورت یک بلوک جداگانه نگه دارید:

$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 برسند. هندلر گازل 7.10 برای هر بلوک هدر کامل یک پاسخ می‌سازد و در آن مرز on_headers را فرا می‌خواند.

بلوک‌ها را به ترتیب نگه دارید. چالش‌های احراز هویت، تغییرمسیرها و پاسخ‌های اطلاعاتی می‌توانند بلوک‌های بیشتری تولید کنند؛ همه مقادیر را در یک آرایه تخت نکنید و پاسخی را فقط به‌خاطر وضعیت 200 آن دسته‌بندی نکنید.

پاسخ برگشتی نمایانگر پاسخ درخواست تکمیل‌شده است، در حالی که blocks مشاهدات گردآوری‌شده توسط فراخوان‌ها را نگه می‌دارد. اگر راه‌اندازی تونل یا TLS شکست بخورد، استثنای انتقال پرتاب‌شده را در برنامه فراخوان مدیریت کنید؛ ممکن است پاسخ نهایی وب‌سایت وجود نداشته باشد.

این رفتار به هندلر cURL گفته‌شده گره خورده است. هندلر سفارشی یا جریانی موظف نیست همان فراخوان‌های بازگشتی دست‌دهی پروکسی را ارائه کند. هدرهای پروکسی ثبت‌شده را داده تشخیصی بدانید و از نگه‌داشتن بی‌دلیل مقادیر مرتبط با حساب خودداری کنید.

مقالات مرتبط