Ang isang HTTPS na kahilingan sa pamamagitan ng HTTP proxy ay maaaring makatanggap ng isang tugon na tumatanggap sa CONNECT at ng susunod na tugon mula sa website sa loob ng tunnel na iyon. Para sa paunang pag-setup ng ruta, tingnan ang proxy na opsyon ng Guzzle sa bawat kahilingan. Ang isang header sa unang tugon ay hindi kailangang umiral sa huling bagay na tugon.

Para sa isang reproduksyon gamit ang HTTP endpoint na ikaw mismo ang pumili, kumuha ng kandidato mula sa listahan ng HTTP proxy at tiyakin na tinatanggap nito ang HTTPS tunnel. Para sa landas ng cURL handler ng Guzzle 7.10, panatilihin ang bawat header callback bilang hiwalay na bloke:

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

Dapat ilantad ng cURL extension ang CURLOPT_SUPPRESS_CONNECT_HEADERS, isang opsyon na ipinakilala ng libcurl 7.54.0. Ang pagtatakda nito sa false ay nagpapahintulot sa mga CONNECT header na makarating sa header callback ng cURL. Ang handler ng Guzzle 7.10 ay bumubuo ng tugon para sa bawat natapos na bloke ng header at tumatawag ng on_headers sa hangganang iyon.

Panatilihin ang mga bloke sa ayos. Ang mga hamon sa pagpapatunay, pag-redirect at nagbibigay-kaalaman na tugon ay makakabuo ng karagdagang mga bloke; huwag patagin ang lahat ng halaga sa isang array at huwag uriin ang isang tugon dahil lamang ang status nito ay 200.

Ang ibinalik na tugon ay kumakatawan sa tugon ng natapos na kahilingan, samantalang ang blocks ay nag-iingat ng mga obserbasyong nakolekta ng mga callback. Kung mabigo ang tunnel o setup ng TLS, pangasiwaan ang itinapon na transfer exception sa tumatawag na aplikasyon; maaaring walang huling tugon ng website.

Ang pag-uugaling ito ay nakatali sa ipinahayag na cURL handler. Ang custom o stream handler ay hindi kinakailangang maglantad ng parehong mga proxy-handshake callback. Ituring ang mga nakuhang proxy header bilang diagnostic na datos at iwasang itago nang hindi kailangan ang mga halagang may kinalaman sa account.

Kaugnay na mga artikulo