Guzzle cURL apdorotuvas: proxy CONNECT antraščių fiksavimas
Fiksuokite atskirus atsakymo antraščių blokus su Guzzle cURL apdorotuvu, kai svarbūs ir proxy CONNECT atsakymas, ir svetainės atsakymas.
HTTPS užklausa per HTTP proxy gali gauti vieną atsakymą, priimantį CONNECT, o vėliau – svetainės atsakymą tame tunelyje. Pradiniam maršruto nustatymui žr. Guzzle proxy parinktį kiekvienai užklausai. Pirmojo atsakymo antraštė nebūtinai turi būti galutiniame atsakymo objekte.
Norėdami atkurti su jūsų pačių pasirinktu HTTP galiniu tašku, paimkite kandidatą iš HTTP tarpinių serverių sąrašo ir patvirtinkite, kad jis priima HTTPS tunelį. Guzzle 7.10 cURL apdorotuvo kelyje išsaugokite kiekvieną antraščių atgalinį iškvietimą kaip atskirą 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(),
];
},
]);
cURL plėtinys turi teikti CURLOPT_SUPPRESS_CONNECT_HEADERS – parinktį, kurią įvedė libcurl 7.54.0. Nustačius ją į false, CONNECT antraštės pasiekia cURL antraščių atgalinį iškvietimą. Guzzle 7.10 apdorotuvas sukuria atsakymą kiekvienam užbaigtam antraščių blokui ir toje riboje iškviečia on_headers.
Išlaikykite blokų tvarką. Autentifikavimo iššūkiai, peradresavimai ir informaciniai atsakymai gali sukurti papildomų blokų; nesuplokite visų reikšmių į vieną masyvą ir neklasifikuokite atsakymo vien todėl, kad jo būsena yra 200.
Grąžinamas atsakymas reiškia užbaigtos užklausos atsakymą, o blocks išsaugo atgalinių iškvietimų surinktus stebėjimus. Jei tunelio ar TLS sąranka nepavyksta, apdorokite išmestą perdavimo išimtį kviečiančioje programoje; galutinio svetainės atsakymo gali nebūti.
Šis elgesys susietas su nurodytu cURL apdorotuvu. Pasirinktinis ar srauto apdorotuvas neprivalo teikti tų pačių proxy rankos paspaudimo atgalinių iškvietimų. Traktuokite užfiksuotas proxy antraštes kaip diagnostikos duomenis ir venkite nereikalingai saugoti su paskyra susijusias reikšmes.