Guzzle se cURL-hanteerder: vang proxy-CONNECT-opskrifte
Vang afsonderlike reaksie-opskrifblokke met Guzzle se cURL-hanteerder wanneer die proxy se CONNECT-antwoord en die webwerf se reaksie albei saak maak.
'n HTTPS-versoek deur 'n HTTP-proxy kan een antwoord kry wat CONNECT aanvaar en later 'n antwoord van die webwerf binne daardie tonnel. Vir die eerste roete-opstelling, sien Guzzle se proxy-opsie per versoek. 'n Opskrif op die eerste antwoord hoef nie op die finale reaksie-objek te bestaan nie.
Vir 'n reproduksie met 'n HTTP-eindpunt wat jy self kies, neem 'n kandidaat uit die HTTP-instaanbedienerlys en bevestig dat dit die HTTPS-tonnel aanvaar. Vir Guzzle 7.10 se cURL-hanteerderpad, bewaar elke opskrif-terugroep as 'n aparte 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(),
];
},
]);
Die cURL-uitbreiding moet CURLOPT_SUPPRESS_CONNECT_HEADERS blootstel, 'n opsie wat deur libcurl 7.54.0 bekend gestel is. Om dit false te stel, laat CONNECT-opskrifte na cURL se opskrif-terugroep toe. Die Guzzle 7.10-hanteerder bou 'n reaksie vir elke voltooide opskrifblok en roep on_headers by daardie grens.
Hou die blokke in volgorde. Verifikasie-uitdagings, herleidings en inligtingsantwoorde kan bykomende blokke lewer; moenie alle waardes in een skikking platdruk nie en moenie 'n reaksie net op grond van sy status 200 klassifiseer nie.
Die teruggekeerde reaksie verteenwoordig die voltooide versoek se reaksie, terwyl blocks die waarnemings bewaar wat deur die terugroepe versamel is. As die tonnel of TLS-opstelling misluk, hanteer die gegooide oordrag-uitsondering in die oproepende toepassing; 'n finale webwerf-reaksie bestaan dalk nie.
Hierdie gedrag is gekoppel aan die genoemde cURL-hanteerder. 'n Pasgemaakte of stroom-hanteerder is nie verplig om dieselfde proxy-handdruk-terugroepe te bied nie. Behandel vasgevangde proxy-opskrifte as diagnostiese data en vermy om rekeninghoudende waardes onnodig te bewaar.