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.

Kapcsolódó cikkek