En HTTPS-forespørsel gjennom en HTTP-proxy kan motta ett svar som godtar CONNECT, og senere et svar fra nettstedet inne i den tunnelen. For den innledende ruteoppsettet, se Guzzles proxyvalg per forespørsel. En header i det første svaret trenger ikke finnes på det endelige svarobjektet.

For å gjenskape med et HTTP-endepunkt du velger selv, ta en kandidat fra listen over HTTP-proxyer og bekreft at den godtar HTTPS-tunnelen. På cURL-handlerbanen til Guzzle 7.10 skal du bevare hvert header-callback som en egen blokk:

$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-utvidelsen må eksponere CURLOPT_SUPPRESS_CONNECT_HEADERS, et alternativ som ble innført av libcurl 7.54.0. Å sette det til false lar CONNECT-hoder nå cURLs header-callback. Guzzle 7.10-handleren bygger et svar for hver fullførte headerblokk og kaller on_headers ved den grensen.

Hold blokkene i rekkefølge. Autentiseringsutfordringer, omdirigeringer og informasjonssvar kan gi flere blokker; ikke flat ut alle verdier i én matrise og ikke klassifiser et svar bare fordi statusen er 200.

Svaret som returneres, representerer svaret fra den fullførte forespørselen, mens blocks bevarer observasjonene som callbackene samlet inn. Hvis tunnel- eller TLS-oppsettet mislykkes, håndter transfer-unntaket som kastes i applikasjonen som kaller; det kan hende at det ikke finnes et endelig nettstedssvar.

Denne oppførselen er knyttet til den angitte cURL-handleren. En egendefinert handler eller strømmehandler er ikke forpliktet til å eksponere de samme proxy-håndtrykk-callbackene. Behandle fangede proxy-hoder som diagnostiske data og unngå å beholde kontorelaterte verdier unødvendig.

Relaterte artikler