Ein HTTPS-førespurnad gjennom ein HTTP-proxy kan få eitt svar som godtek CONNECT, og seinare eit svar frå nettstaden inne i den tunnelen. For den innleiande ruteoppsettet, sjå proxyvalet til Guzzle per førespurnad. Eit hovud i det første svaret treng ikkje finnast på det endelege svarobjektet.

For å gjenskape med eit HTTP-endepunkt du vel sjølv, ta ein kandidat frå lista over HTTP-proxyar og stadfest at han godtek HTTPS-tunnelen. På cURL-handterarbana til Guzzle 7.10 skal du ta vare på kvar hovud-callback som ein eigen 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-utvidinga må eksponera CURLOPT_SUPPRESS_CONNECT_HEADERS, eit val som vart innført av libcurl 7.54.0. Å setja det til false lèt CONNECT-hovud nå hovud-callbacken til cURL. Handteraren til Guzzle 7.10 byggjer eit svar for kvar fullført hovudblokk og kallar on_headers ved den grensa.

Hald blokkane i rekkjefølgje. Autentiseringsutfordringar, omdirigeringar og informasjonssvar kan gje fleire blokkar; ikkje flat ut alle verdiar i éin matrise og ikkje klassifiser eit svar berre fordi statusen er 200.

Svaret som vert returnert, representerer svaret frå den fullførte førespurnaden, medan blocks tek vare på observasjonane som callbackane samla inn. Viss tunnel- eller TLS-oppsettet mislukkast, handsam overføringsunntaket som vert kasta i applikasjonen som kallar; det kan henda at det ikkje finst eit endeleg nettstadssvar.

Denne åtferda er knytt til den oppgjevne cURL-handteraren. Ein eigen handterar eller straumhandterar er ikkje pliktig til å eksponera dei same proxy-handtrykk-callbackane. Handsame fanga proxy-hovud som diagnostiske data og unngå å halda på kontorelaterte verdiar unødig.

Relaterte artiklar