La cURL-traktilo de Guzzle: kapti la CONNECT-kapojn de la prokurilo
Kaptu apartajn blokojn de respondaj kapoj per la cURL-traktilo de Guzzle, kiam gravas kaj la CONNECT-respondo de la prokurilo kaj la respondo de la retejo.
HTTPS-peto tra HTTP-prokurilo povas ricevi unu respondon akceptantan CONNECT, kaj poste respondon de la retejo ene de tiu tunelo. Por la komenca vojagordado, vidu la prokurilan opcion de Guzzle por ĉiu peto. Kapo de la unua respondo ne nepre ekzistas en la fina responda objekto.
Por reprodukti per HTTP-finpunkto, kiun vi mem elektas, prenu kandidaton el la listo de HTTP-prokuriloj kaj konfirmu, ke ĝi akceptas la HTTPS-tunelon. Por la cURL-traktila vojo de Guzzle 7.10, konservu ĉiun kapo-retroalvokon kiel apartan blokon:
$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(),
];
},
]);
La cURL-etendaĵo devas eksponi CURLOPT_SUPPRESS_CONNECT_HEADERS, opcion enkondukitan de libcurl 7.54.0. Agordo al false ebligas al CONNECT-kapoj atingi la kapo-retroalvokon de cURL. La traktilo de Guzzle 7.10 konstruas respondon por ĉiu kompleta kapobloko kaj alvokas on_headers ĉe tiu limo.
Konservu la blokojn laŭ ordo. Aŭtentigaj defioj, alidirektadoj kaj informaj respondoj povas produkti pliajn blokojn; ne platigu ĉiujn valorojn en unu aron kaj ne klasifiku respondon nur pro tio, ke ĝia stato estas 200.
La redonita respondo reprezentas la respondon de la finita peto, dum blocks konservas la observojn kolektitajn de la retroalvokoj. Se la tunela aŭ TLS-agordo malsukcesas, traktu la ĵetitan transdonan escepton en la alvokanta aplikaĵo; fina reteja respondo eble ne ekzistas.
Ĉi tiu konduto ligiĝas al la indikita cURL-traktilo. Propra traktilo aŭ flu-traktilo ne devas eksponi la samajn prokuril-manpremajn retroalvokojn. Traktu kaptitajn prokurilajn kapojn kiel diagnozajn datumojn kaj evitu senbezone konservi kontligitajn valorojn.