Požiadavka HTTPS cez HTTP proxy môže dostať jednu odpoveď prijímajúcu CONNECT a neskôr odpoveď z webu v tomto tuneli. Pre počiatočné nastavenie trasy pozrite voľbu proxy v Guzzle pre jednotlivú požiadavku. Hlavička z prvej odpovede nemusí existovať na konečnom objekte odpovede.

Na reprodukciu s HTTP koncovým bodom, ktorý si zvolíte sami, vezmite kandidáta zo zoznamu HTTP proxy a overte, že prijíma tunel HTTPS. Na ceste cURL handlera v Guzzle 7.10 uchovávajte každé spätné volanie hlavičiek ako samostatný blok:

$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(),
        ];
    },
]);

Rozšírenie cURL musí sprístupniť CURLOPT_SUPPRESS_CONNECT_HEADERS, voľbu zavedenú v libcurl 7.54.0. Nastavenie na false umožní hlavičkám CONNECT dostať sa do spätného volania hlavičiek cURL. Handler Guzzle 7.10 zostaví odpoveď pre každý dokončený blok hlavičiek a na tej hranici zavolá on_headers.

Bloky udržujte v poradí. Overovacie výzvy, presmerovania a informatívne odpovede môžu vytvoriť ďalšie bloky; nezlučujte všetky hodnoty do jedného poľa a neklasifikujte odpoveď len preto, že má stav 200.

Vrátená odpoveď predstavuje odpoveď dokončenej požiadavky, zatiaľ čo blocks uchováva pozorovania zhromaždené spätnými volaniami. Ak nastavenie tunela alebo TLS zlyhá, ošetrite vyhodenú výnimku prenosu vo volajúcej aplikácii; konečná odpoveď webu nemusí existovať.

Toto správanie je viazané na uvedený cURL handler. Vlastný handler alebo streamový handler nemusí poskytovať rovnaké spätné volania proxy handshake. S zachytenými hlavičkami proxy zaobchádzajte ako s diagnostickými údajmi a vyhnite sa zbytočnému uchovávaniu hodnôt spojených s účtom.

Súvisiace články