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 манипулатор. Персонализиран или потоков манипулатор не е задължен да предоставя същите обратни извиквания при прокси ръкостискането. Отнасяйте се към уловените прокси заглавки като диагностични данни и избягвайте ненужното запазване на стойности, свързани с акаунт.

Подобни статии