Handler-i cURL i Guzzle: Kapja e header-ëve CONNECT të proxy-t
Kapni blloqe të veçanta të header-ëve të përgjigjjes me handler-in cURL të Guzzle kur përgjigjja CONNECT e proxy-t dhe përgjigjja e sajtit kanë rëndësi.
Një kërkesë HTTPS përmes një proxy HTTP mund të marrë një përgjigjje që pranon CONNECT dhe një përgjigjje të mëvonshme nga sajti brenda atij tuneli. Për konfigurimin fillestar të rrugës, shihni opsionin e proxy-t për çdo kërkesë të Guzzle. Një header në përgjigjjen e parë nuk duhet të ekzistojë në objektin e përgjigjjes përfundimtare.
Për një riprodhim duke përdorur një endpoint HTTP që e zgjidhni vetë, merrni një kandidat nga lista e proxy-ve HTTP dhe konfirmoni se pranon tunelin HTTPS. Për rrugën e handler-it cURL të Guzzle 7.10, ruani çdo header callback si bllok të veçantë:
$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(),
];
},
]);Zgjerimi cURL duhet të ekspozojë CURLOPT_SUPPRESS_CONNECT_HEADERS, një opsion i prezantuar nga libcurl 7.54.0. Vendosja në false lejon që header-ët CONNECT të arrijnë në header callback-in e cURL. Handler-i i Guzzle 7.10 ndërton një përgjigjje për çdo bllok header-ësh të përfunduar dhe thërret on_headers në atë kufi.
Mbajini blloqet në rend. Sfidat e autentikimit, ridrejtimet dhe përgjigjjet informuese mund të prodhojnë blloqe shtesë; mos i rrafshoni të gjitha vlerat në një array të vetëm dhe mos e klasifikoni një përgjigjje vetëm sepse statusi i saj është 200.
Përgjigjja e kthyer përfaqëson përgjigjjen e kërkesës së përfunduar, ndërsa blocks ruan vëzhgimet e mbledhura nga callback-ët. Nëse tuneli ose konfigurimi TLS dështon, trajtoni transfer exception e hedhur në aplikacionin thirrës; një përgjigjje përfundimtare e sajtit mund të mos ekzistojë.
Kjo sjellje lidhet me handler-in cURL të deklaruar. Një handler i personalizuar ose stream handler nuk kërkohet të ekspozojë të njëjtat callback-e të proxy-handshake. Trajtoni header-ët e kapur të proxy-t si të dhëna diagnostikuese dhe shmangni mbajtjen e panevojshme të vlerave që lidhen me llogarinë.