En HTTPS-forespørsel via en HTTP-proxy kan få ett svar som aksepterer CONNECT, og deretter et svar fra nettstedet inne i tunnelen. Se Guzzles proxyvalg per forespørsel for oppsett av den første ruten. Et hode i det første svaret trenger ikke å finnes i det endelige svarobjektet.

Vil du gjenskape dette med et HTTP-endepunkt du velger selv, tar du en kandidat fra listen over HTTP-proxyer og bekrefter at den aksepterer HTTPS-tunnelen. På cURL-handlerveien i Guzzle 7.10 bevarer du hvert hode-callback som en separat 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å tilby CURLOPT_SUPPRESS_CONNECT_HEADERS, en innstilling som libcurl 7.54.0 introduserte. Setter du den til false, når CONNECT-hodene cURLs hode-callback. Guzzle 7.10-handleren bygger et svar for hver fullførte hodeblokk og kaller on_headers ved den grensen.

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

Svaret som returneres, representerer svaret på den fullførte forespørselen, mens blocks bevarer observasjonene som callbackene samlet. Hvis tunnel- eller TLS-oppsettet feiler, må du håndtere transfer-unntaket som kastes i applikasjonen som kaller; det kan hende at det ikke finnes noe endelig nettstedssvar.

Denne oppførselen henger sammen med den angitte cURL-handleren. En egen handler eller strømmehandler er ikke forpliktet til å tilby de samme proxy-håndtrykk-callbackene. Behandle fangede proxy-hoder som diagnostiske data, og unngå å beholde kontorelaterte verdier uten grunn.

Relaterte artikler