Permintaan HTTPS melalui proksi HTTP boleh menerima satu respons yang menerima CONNECT dan kemudian respons daripada laman web di dalam terowong itu. Untuk persediaan laluan awal, lihat pilihan proksi setiap permintaan Guzzle. Pengepala pada respons pertama tidak semestinya wujud pada objek respons akhir.

Untuk menghasilkan semula dengan titik akhir HTTP yang anda pilih sendiri, ambil calon daripada senarai proksi HTTP dan pastikan ia menerima terowong HTTPS. Pada laluan pengendali cURL Guzzle 7.10, simpan setiap panggilan balik pengepala sebagai blok berasingan:

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

Sambungan cURL mesti mendedahkan CURLOPT_SUPPRESS_CONNECT_HEADERS, pilihan yang diperkenalkan oleh libcurl 7.54.0. Menetapkannya kepada false membolehkan pengepala CONNECT sampai ke panggilan balik pengepala cURL. Pengendali Guzzle 7.10 membina respons untuk setiap blok pengepala yang selesai dan memanggil on_headers pada sempadan itu.

Kekalkan blok mengikut urutan. Cabaran pengesahan, ubah hala dan balasan maklumat boleh menghasilkan blok tambahan; jangan ratakan semua nilai ke dalam satu tatasusunan dan jangan klasifikasikan respons hanya kerana statusnya 200.

Respons yang dikembalikan mewakili respons permintaan yang selesai, manakala blocks menyimpan pemerhatian yang dikumpul oleh panggilan balik. Jika persediaan terowong atau TLS gagal, kendalikan pengecualian pemindahan yang dilemparkan dalam aplikasi pemanggil; respons akhir laman web mungkin tiada.

Gelagat ini terikat kepada pengendali cURL yang dinyatakan. Pengendali tersuai atau pengendali strim tidak diwajibkan mendedahkan panggilan balik jabat tangan proksi yang sama. Anggap pengepala proksi yang ditangkap sebagai data diagnostik dan elakkan menyimpan nilai berkaitan akaun tanpa keperluan.

Artikel berkaitan