Guzzle'ning cURL ishlovchisi: Proxy CONNECT sarlavhalarini ushlash
Proxy'ning CONNECT javobi ham, veb-sayt javobi ham muhim bo'lganda Guzzle'ning cURL ishlovchisi bilan alohida javob sarlavha bloklarini ushlang.
HTTP proxy orqali o'tadigan HTTPS so'rov CONNECT ni qabul qiladigan bitta javobni va keyinroq shu tunnel ichidagi veb-saytdan keladigan javobni olishi mumkin. Boshlang'ich marshrut sozlamasi uchun Guzzle'ning har bir so'rov uchun proxy opsiyasini ko'ring. Birinchi javobdagi sarlavha yakuniy javob obyektida bo'lishi shart emas.
O'zingiz tanlagan HTTP oxirgi nuqtasi bilan takrorlash uchun HTTP proxy ro'yxatidan nomzod oling va uning HTTPS tunnelini qabul qilishini tasdiqlang. Guzzle 7.10 ning cURL ishlovchi yo'li uchun har bir header callback ni alohida blok sifatida saqlang:
$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 kengaytmasi CURLOPT_SUPPRESS_CONNECT_HEADERS ni taqdim etishi kerak, bu libcurl 7.54.0 tomonidan kiritilgan opsiya. Uni false ga o'rnatish CONNECT sarlavhalarining cURL ning header callback iga yetib borishiga imkon beradi. Guzzle 7.10 ishlovchisi har bir tugallangan sarlavha bloki uchun javob quradi va shu chegarada on_headers ni chaqiradi.
Bloklarni tartibda saqlang. Autentifikatsiya sinovlari, qayta yo'naltirishlar va axborot javoblari qo'shimcha bloklar keltirib chiqarishi mumkin; barcha qiymatlarni bitta array ga tekislamang va javobni faqat holati 200 bo'lgani uchun tasniflamang.
Qaytarilgan javob tugallangan so'rovning javobini ifodalaydi, blocks esa callback lar to'plagan kuzatishlarni saqlaydi. Tunnel yoki TLS sozlamasi muvaffaqiyatsiz bo'lsa, tashlangan transfer exception ni chaqiruvchi ilovada ishlang; yakuniy veb-sayt javobi mavjud bo'lmasligi mumkin.
Bu xatti-harakat ko'rsatilgan cURL ishlovchisiga bog'liq. Maxsus yoki stream ishlovchi bir xil proxy-handshake callback larini taqdim etishi shart emas. Ushlangan proxy sarlavhalarini diagnostik ma'lumot deb qarang va hisobga tegishli qiymatlarni keraksiz saqlamang.