HTTPS-запыт праз HTTP-проксі можа атрымаць адзін адказ, які прымае CONNECT, а затым пазнейшы адказ ад сайта ўнутры гэтага тунеля. Для пачатковай наладкі маршруту гл. опцыю проксі Guzzle для кожнага запыту. Загаловак з першага адказу не абавязаны прысутнічаць у канчатковым аб'екце адказу.

Каб узнавіць гэта з HTTP-канчатковай кропкай, якую вы выбіраеце самі, вазьміце кандыдата са спіса HTTP-проксі і пераканайцеся, што ён прымае HTTPS-тунель. Для шляху cURL-апрацоўніка Guzzle 7.10 захоўвайце кожны зваротны выклік загалоўкаў як асобны блок:

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

Пашырэнне cURL павінна прадастаўляць CURLOPT_SUPPRESS_CONNECT_HEADERS — опцыю, уведзеную libcurl 7.54.0. Значэнне false дазваляе загалоўкам CONNECT дасягаць зваротнага выкліку загалоўкаў cURL. Апрацоўнік Guzzle 7.10 будуе адказ для кожнага завершанага блока загалоўкаў і выклікае on_headers на гэтай мяжы.

Захоўвайце блокі па парадку. Прад'яўленні аўтэнтыфікацыі, перанакіраванні і інфармацыйныя адказы могуць ствараць дадатковыя блокі; не згладжвайце ўсе значэнні ў адзін масіў і не класіфікуйце адказ толькі па тым, што яго статус 200.

Вярнуты адказ уяўляе адказ завершанага запыту, а blocks захоўвае назіранні, сабраныя зваротнымі выклікамі. Калі наладка тунеля або TLS не ўдалася, апрацуйце выкінутае выключэнне перадачы ў прыкладным кодзе, які выклікае; канчатковага адказу сайта можа не быць.

Гэтыя паводзіны прывязаныя да названага cURL-апрацоўніка. Уласны апрацоўнік або апрацоўнік патоку не абавязаны прадастаўляць тыя ж зваротныя выклікі праксі-рукапаціскання. Разглядайце перахопленыя загалоўкі проксі як дыягнастычныя даныя і пазбягайце непатрэбнага захавання значэнняў, звязаных з уліковым запісам.

Падобныя артыкулы