Guzzle-ის cURL დამმუშავებელი: პროქსის CONNECT სათაურების დაჭერა
დაიჭირეთ პასუხის სათაურების ცალკეული ბლოკები Guzzle-ის cURL დამმუშავებლით, როცა მნიშვნელოვანია როგორც პროქსის CONNECT პასუხი, ისე საიტის პასუხი.
HTTP პროქსის გავლით HTTPS მოთხოვნამ შეიძლება მიიღოს CONNECT-ის მიმღები ერთი პასუხი და შემდეგ, მოგვიანებით, საიტის პასუხი ამ გვირაბის შიგნით. საწყისი მარშრუტის კონფიგურაციისთვის იხილეთ Guzzle-ის პროქსის პარამეტრი თითო მოთხოვნაზე. პირველი პასუხის სათაური სულაც არ უნდა არსებობდეს საბოლოო პასუხის ობიექტში.
თქვენ მიერ არჩეული HTTP ბოლო წერტილით გასამეორებლად აიღეთ კანდიდატი HTTP პროქსიების სიიდან და დაადასტურეთ, რომ ის იღებს HTTPS გვირაბს. Guzzle 7.10-ის cURL დამმუშავებლის გზაზე შეინახეთ სათაურების ყოველი უკუგამოძახება ცალკე ბლოკად:
$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 დამმუშავებელთან. მორგებული ან ნაკადის დამმუშავებელი არ არის ვალდებული გამოაჩინოს იგივე პროქსის ხელის ჩამორთმევის უკუგამოძახებები. მოეპყარით დაჭერილ პროქსის სათაურებს როგორც დიაგნოსტიკურ მონაცემებს და მოერიდეთ ანგარიშთან დაკავშირებული მნიშვნელობების ზედმეტად შენახვას.