cURL handler ຂອງ Guzzle: ຈັບເອົາເຮດເດີ CONNECT ຂອງ proxy
ຈັບເອົາບລັອກເຮດເດີການຕອບສະໜອງແຍກຕ່າງຫາກດ້ວຍ cURL handler ຂອງ Guzzle ເມື່ອທັງການຕອບ CONNECT ຂອງ proxy ແລະ ການຕອບຂອງເວັບໄຊຕ໌ມີຄວາມສຳຄັນ.
ຄຳຮ້ອງ HTTPS ຜ່ານ proxy HTTP ອາດໄດ້ຮັບການຕອບໜຶ່ງທີ່ຍອມຮັບ CONNECT ແລະ ຈາກນັ້ນກໍໄດ້ຮັບການຕອບຈາກເວັບໄຊຕ໌ພາຍໃນ tunnel ນັ້ນ. ສຳລັບການຕັ້ງເສັ້ນທາງເບື້ອງຕົ້ນ ເບິ່ງ ຕົວເລືອກ proxy ຕໍ່ຄຳຮ້ອງຂອງ Guzzle. ເຮດເດີໃນການຕອບຄັ້ງທຳອິດບໍ່ຈຳເປັນຕ້ອງມີຢູ່ໃນວັດຖຸການຕອບສຸດທ້າຍ.
ເພື່ອສ້າງຄືນກັບຈຸດສິ້ນສຸດ HTTP ທີ່ທ່ານເລືອກເອງ ໃຫ້ເອົາຜູ້ສະໝັກຈາກ ລາຍການພຣັອກຊີ HTTP ແລະ ຢືນຢັນວ່າມັນຍອມຮັບ tunnel HTTPS. ໃນເສັ້ນທາງ cURL handler ຂອງ 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. cURL handler ຂອງ Guzzle 7.10 ສ້າງການຕອບສຳລັບແຕ່ລະບລັອກເຮດເດີທີ່ສຳເລັດ ແລະ ເອີ້ນ on_headers ຢູ່ຂອບເຂດນັ້ນ.
ເກັບບລັອກໃຫ້ຢູ່ໃນລຳດັບ. ການທ້າທາຍການຢືນຢັນ ການປ່ຽນເສັ້ນທາງ ແລະ ການຕອບແບບຂໍ້ມູນອາດສ້າງບລັອກເພີ່ມເຕີມ; ຢ່າເຮັດໃຫ້ຄ່າທັງໝົດແປເປັນອາເຣດຽວ ແລະ ຢ່າຈັດປະເພດການຕອບພຽງເພາະສະຖານະຂອງມັນເປັນ 200.
ການຕອບທີ່ສົ່ງຄືນເປັນຕົວແທນການຕອບຂອງຄຳຮ້ອງທີ່ສຳເລັດ ສ່ວນ blocks ເກັບຂໍ້ສັງເກດທີ່ການເອີ້ນກັບເກັບໄດ້. ຖ້າການຕັ້ງ tunnel ຫຼື TLS ລົ້ມເຫຼວ ໃຫ້ຈັດການຂໍ້ຍົກເວັ້ນການໂອນທີ່ຖືກໂຍນໃນແອັບທີ່ເອີ້ນ; ການຕອບສຸດທ້າຍຈາກເວັບໄຊຕ໌ອາດບໍ່ມີ.
ພຶດຕິກຳນີ້ຜູກກັບ cURL handler ທີ່ກ່າວມາ. handler ກຳນົດເອງ ຫຼື stream handler ບໍ່ຈຳເປັນຕ້ອງເປີດເຜີຍການເອີ້ນກັບການຈັບມື proxy ແບບດຽວກັນ. ຖືວ່າເຮດເດີ proxy ທີ່ຈັບໄດ້ເປັນຂໍ້ມູນການວິເຄາະ ແລະ ຫຼີກລ່ຽງການເກັບຄ່າທີ່ກ່ຽວຂ້ອງກັບບັນຊີໂດຍບໍ່ຈຳເປັນ.