cURL-апрацоўнік Guzzle: захаванне загалоўкаў CONNECT проксі
Захоўвайце асобныя блокі загалоўкаў адказу з дапамогай cURL-апрацоўніка Guzzle, калі важныя і адказ проксі на CONNECT, і адказ сайта.
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-апрацоўніка. Уласны апрацоўнік або апрацоўнік патоку не абавязаны прадастаўляць тыя ж зваротныя выклікі праксі-рукапаціскання. Разглядайце перахопленыя загалоўкі проксі як дыягнастычныя даныя і пазбягайце непатрэбнага захавання значэнняў, звязаных з уліковым запісам.