בקשת HTTPS דרך פרוקסי HTTP יכולה לקבל תגובה אחת שמקבלת CONNECT, ולאחר מכן תגובה מהאתר בתוך המנהרה הזו. להגדרת המסלול הראשונית, ראו אפשרות הפרוקסי של Guzzle לכל בקשה. כותרת בתגובה הראשונה אינה חייבת להתקיים באובייקט התגובה הסופי.

לשחזור עם נקודת קצה HTTP שתבחרו בעצמכם, קחו מועמד מרשימת שרתי פרוקסי HTTP וודאו שהוא מקבל את מנהרת ה-HTTPS. במסלול מטפל ה-cURL של Guzzle 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. מטפל Guzzle 7.10 בונה תגובה לכל גוש כותרות שהושלם וקורא ל-on_headers בגבול הזה.

שמרו על סדר הגושים. אתגרי אימות, הפניות מחדש ותגובות מידע עשויים ליצור גושים נוספים; אל תשטחו את כל הערכים במערך אחד ואל תסווגו תגובה רק משום שהסטטוס שלה הוא 200.

התגובה המוחזרת מייצגת את תגובת הבקשה שהושלמה, בעוד blocks משמר את התצפיות שנאספו בקריאות החוזרות. אם הגדרת המנהרה או TLS נכשלת, טפלו בחריגת ההעברה שנזרקת באפליקציה הקוראת; ייתכן שלא תהיה תגובת אתר סופית.

התנהגות זו קשורה למטפל ה-cURL הנקוב. מטפל מותאם אישית או מטפל זרימה אינו מחויב לחשוף את אותן קריאות חוזרות של לחיצת היד של הפרוקסי. התייחסו לכותרות הפרוקסי שנלכדו כנתוני אבחון והימנעו משמירת ערכים הקשורים לחשבון ללא צורך.

מאמרים קשורים