Permintaan HTTPS melalui proxy HTTP dapat menerima satu respons yang menerima CONNECT dan kemudian respons dari situs web di dalam tunnel tersebut. Untuk penyiapan rute awal, lihat opsi proxy per permintaan Guzzle. Header pada respons pertama belum tentu ada pada objek respons akhir.

Untuk mereproduksi dengan endpoint HTTP yang Anda pilih sendiri, ambil kandidat dari daftar proxy HTTP dan pastikan kandidat itu menerima tunnel HTTPS. Pada jalur handler cURL Guzzle 7.10, simpan setiap callback header sebagai blok terpisah:

$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(),
        ];
    },
]);

Ekstensi cURL harus menyediakan CURLOPT_SUPPRESS_CONNECT_HEADERS, opsi yang diperkenalkan oleh libcurl 7.54.0. Menyetelnya ke false memungkinkan header CONNECT mencapai callback header cURL. Handler Guzzle 7.10 membangun respons untuk setiap blok header yang selesai dan memanggil on_headers pada batas tersebut.

Jaga urutan blok. Tantangan autentikasi, pengalihan, dan balasan informasi dapat menghasilkan blok tambahan; jangan ratakan semua nilai ke dalam satu array dan jangan mengklasifikasikan respons hanya karena statusnya 200.

Respons yang dikembalikan mewakili respons permintaan yang selesai, sementara blocks mempertahankan pengamatan yang dikumpulkan oleh callback. Jika penyiapan tunnel atau TLS gagal, tangani pengecualian transfer yang dilempar di aplikasi pemanggil; respons situs web akhir mungkin tidak ada.

Perilaku ini terkait dengan handler cURL yang disebutkan. Handler khusus atau handler stream tidak wajib menyediakan callback jabat tangan proxy yang sama. Perlakukan header proxy yang ditangkap sebagai data diagnostik dan hindari menyimpan nilai yang terkait akun tanpa perlu.

Artikel terkait