A Guzzle cURL-kezelője: a proxy CONNECT fejléceinek rögzítése
Rögzítse külön válaszfejlécblokkokként a Guzzle cURL-kezelőjével, amikor a proxy CONNECT-válasza és a webhely válasza is számít.
Egy HTTP-proxyn keresztüli HTTPS-kérés kaphat egy CONNECT-et elfogadó választ, majd később a webhely válaszát azon a tunelen belül. A kezdeti útvonal-beállításhoz lásd a Guzzle kérésenkénti proxy-beállítását. Az első válasz egy fejléce nem feltétlenül létezik a végső válaszobjektumban.
Ha a saját maga által választott HTTP-végponttal szeretné reprodukálni, válasszon jelöltet a HTTP-proxyk listájából, és ellenőrizze, hogy elfogadja-e a HTTPS-tunelt. A Guzzle 7.10 cURL-kezelőjének útvonalán minden fejléc-visszahívást külön blokként őrizzen meg:
$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(),
];
},
]);
A cURL-kiterjesztésnek elérhetővé kell tennie a CURLOPT_SUPPRESS_CONNECT_HEADERS beállítást, amelyet a libcurl 7.54.0 vezetett be. Ha false-ra állítja, a CONNECT-fejlécek eljutnak a cURL fejléc-visszahívásához. A Guzzle 7.10 kezelője minden befejezett fejlécblokkhoz választ épít, és azon a határon meghívja az on_headers-t.
Tartsa sorrendben a blokkokat. A hitelesítési kihívások, átirányítások és tájékoztató válaszok további blokkokat hozhatnak létre; ne lapítsa egyetlen tömbbe az összes értéket, és ne sorolja be a választ csak azért, mert az állapota 200.
A visszaadott válasz a befejezett kérés válaszát képviseli, míg a blocks a visszahívások által gyűjtött megfigyeléseket őrzi. Ha a tunel vagy a TLS beállítása meghiúsul, kezelje a dobott átviteli kivételt a hívó alkalmazásban; előfordulhat, hogy nincs végső webhelyválasz.
Ez a viselkedés a megnevezett cURL-kezelőhöz kötődik. Az egyéni vagy streamkezelő nem köteles ugyanezeket a proxy-kézfogás-visszahívásokat biztosítani. A rögzített proxyfejléceket diagnosztikai adatként kezelje, és kerülje a fiókhoz kötődő értékek szükségtelen megőrzését.