El gestor cURL de Guzzle: captura les capçaleres CONNECT del proxy
Captureu blocs de capçaleres de resposta separats amb el gestor cURL de Guzzle quan tant la resposta CONNECT del proxy com la resposta del lloc web són importants.
Una sol·licitud HTTPS a través d'un proxy HTTP pot rebre una resposta que accepta CONNECT i, més tard, una resposta del lloc web dins d'aquest túnel. Per a la configuració inicial de la ruta, vegeu l'opció de proxy per sol·licitud de Guzzle. Una capçalera de la primera resposta no cal que existeixi a l'objecte de resposta final.
Per reproduir-ho amb un punt final HTTP que trieu vosaltres, preneu un candidat de la llista de proxys HTTP i confirmeu que accepta el túnel HTTPS. Per al camí del gestor cURL de Guzzle 7.10, conserveu cada devolució de trucada de capçaleres com un bloc separat:
$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(),
];
},
]);
L'extensió cURL ha d'exposar CURLOPT_SUPPRESS_CONNECT_HEADERS, una opció introduïda per libcurl 7.54.0. Posar-la a false permet que les capçaleres CONNECT arribin a la devolució de trucada de capçaleres de cURL. El gestor de Guzzle 7.10 construeix una resposta per a cada bloc de capçaleres complet i crida on_headers en aquesta frontera.
Manteniu els blocs en ordre. Els reptes d'autenticació, les redireccions i les respostes informatives poden produir blocs addicionals; no aplaneu tots els valors en una sola matriu ni classifiqueu una resposta només perquè el seu estat sigui 200.
La resposta retornada representa la resposta de la sol·licitud completada, mentre que blocks conserva les observacions recollides per les devolucions de trucada. Si falla la configuració del túnel o de TLS, gestioneu l'excepció de transferència llançada a l'aplicació que fa la crida; pot ser que no hi hagi cap resposta final del lloc web.
Aquest comportament està lligat al gestor cURL indicat. Un gestor personalitzat o de flux no té l'obligació d'exposar les mateixes devolucions de trucada de l'apretada de mans del proxy. Tracteu les capçaleres de proxy capturades com a dades de diagnòstic i eviteu retenir innecessàriament valors vinculats al compte.