HTTP-välityspalvelimen kautta tehty HTTPS-pyyntö voi saada yhden vastauksen, joka hyväksyy CONNECTin, ja myöhemmin verkkosivuston vastauksen kyseisen tunnelin sisällä. Alkureitin määrittämiseksi katso Guzzlen pyyntökohtainen välityspalvelinasetus. Ensimmäisen vastauksen otsakkeen ei tarvitse olla lopullisessa vastausobjektissa.

Toistaaksesi itse valitsemasi HTTP-päätepisteen kanssa ota ehdokas HTTP-välityspalvelinten luettelosta ja varmista, että se hyväksyy HTTPS-tunnelin. Guzzle 7.10:n cURL-käsittelijän polulla säilytä jokainen otsakkeiden takaisinkutsu erillisenä lohkona:

$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-laajennuksen on tarjottava CURLOPT_SUPPRESS_CONNECT_HEADERS, libcurl 7.54.0:n lisäämä asetus. Arvoksi false asetettuna CONNECT-otsakkeet pääsevät cURL:n otsakkeiden takaisinkutsuun. Guzzle 7.10:n käsittelijä rakentaa vastauksen jokaisesta valmiista otsakelohkosta ja kutsuu on_headersia kyseisellä rajalla.

Pidä lohkot järjestyksessä. Todennuksen haasteet, uudelleenohjaukset ja tiedotusvastaukset voivat tuottaa lisälohkoja; älä litistä kaikkia arvoja yhteen taulukkoon äläkä luokittele vastausta pelkästään siksi, että sen tila on 200.

Palautettu vastaus edustaa valmiin pyynnön vastausta, kun taas blocks säilyttää takaisinkutsujen keräämät havainnot. Jos tunnelin tai TLS:n määritys epäonnistuu, käsittele heitetty siirtopoikkeus kutsuvassa sovelluksessa; verkkosivuston lopullista vastausta ei välttämättä ole.

Tämä käyttäytyminen liittyy mainittuun cURL-käsittelijään. Mukautetun tai virtauskäsittelijän ei tarvitse tarjota samoja välityspalvelimen kättelyn takaisinkutsuja. Käsittele tallennettuja välityspalvelimen otsakkeita diagnostiikkatietoina ja vältä tilikohtaisten arvojen tarpeetonta säilyttämistä.

Aiheeseen liittyvät artikkelit