Požadavek HTTPS přes HTTP proxy může obdržet jednu odpověď přijímající CONNECT a později odpověď z webu uvnitř tohoto tunelu. Pro počáteční nastavení trasy viz volba proxy v Guzzle pro jednotlivý požadavek. Hlavička z první odpovědi nemusí existovat na konečném objektu odpovědi.

Pro reprodukci s HTTP koncovým bodem, který si zvolíte sami, vezměte kandidáta ze seznamu HTTP proxy a ověřte, že přijímá tunel HTTPS. Pro cestu cURL handleru v Guzzle 7.10 uchovávejte každé zpětné volání hlaviček jako 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šíření cURL musí zpřístupnit CURLOPT_SUPPRESS_CONNECT_HEADERS, volbu zavedenou v libcurl 7.54.0. Nastavení na false umožní, aby se hlavičky CONNECT dostaly do zpětného volání hlaviček cURL. Handler Guzzle 7.10 sestaví odpověď pro každý dokončený blok hlaviček a na této hranici zavolá on_headers.

Bloky udržujte v pořadí. Ověřovací výzvy, přesměrování a informativní odpovědi mohou vytvořit další bloky; neslučujte všechny hodnoty do jednoho pole a neklasifikujte odpověď jen podle toho, že má stav 200.

Vrácená odpověď představuje odpověď dokončeného požadavku, zatímco blocks uchovává pozorování shromážděná zpětnými voláními. Pokud nastavení tunelu nebo TLS selže, ošetřete vyhozenou výjimku přenosu ve volající aplikaci; konečná odpověď webu nemusí existovat.

Toto chování je vázáno na uvedený cURL handler. Vlastní handler nebo streamový handler nemusí zpřístupňovat stejná zpětná volání proxy handshake. S zachycenými hlavičkami proxy zacházejte jako s diagnostickými daty a vyhněte se zbytečnému uchovávání hodnot spojených s účtem.

Související články