ການຕອບສະໜອງ cURL ຂອງ PHP ຖືກຕັດບໍ?
ກວດຜົນການໂອນ cURL, ສະຖານະການຕອບສະໜອງ ແລະ ການເປັນຕົວແທນຂອງ body ກ່ອນທີ່ຈະປຽບທຽບຂະໜາດທີ່ດາວໂຫຼດກັບ Content-Length.
ເລີ່ມຈາກຜົນຂອງ cURL ເມື່ອໜ້າເວັບທີ່ດາວໂຫຼດຜ່ານ proxy ເບິ່ງຄືບໍ່ຄົບຖ້ວນ. ການຕອບສະໜອງສັ້ນ, ການໂອນທີ່ລົ້ມເຫຼວ ແລະ ໜ້າບລັອກຄົບຖ້ວນ ຕ້ອງການຄຳອະທິບາຍຕ່າງກັນ.
ເມື່ອ CURLOPT_RETURNTRANSFER ເປີດຢູ່ໃນ handle ທີ່ຕັ້ງຄ່າແລ້ວ:
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch), curl_errno($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$downloaded = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD_T);
$declared = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T);
ເກັບຄ່າເຫຼົ່ານີ້ກ່ອນທີ່ຈະປ່ອຍ handle. ການປຽບທຽບແບບເຂັ້ມງວດແຍກຄວາມລົ້ມເຫຼວຂອງການໂອນອອກຈາກ body ທີ່ສຳເລັດ ເຊັ່ນ ສະຕຣິງຫວ່າງ ຫຼື “0”. ສະຖານະຄວາມຜິດພາດ HTTP ບໍ່ແມ່ນຄວາມລົ້ມເຫຼວຂອງ curl_exec ໂດຍອັດຕະໂນມັດ ດັ່ງນັ້ນຈຶ່ງຕ້ອງຕີຄວາມສະຖານະນຳ.
ຕົວນັບຂໍ້ມູນທີ່ດາວໂຫຼດບໍ່ລວມ header. ຄ່າທີ່ປະກາດມາຈາກ Content-Length ແລະ ເປັນ -1 ເມື່ອບໍ່ຮູ້ຂະໜາດ. ການຕອບສະໜອງອາດລະເວັ້ນ Content-Length ໄດ້ຢ່າງຖືກຕ້ອງ; ຄ່າທີ່ບໍ່ຮູ້ບໍ່ແມ່ນການບົ່ງຊີ້ໄຟລ໌ທີ່ຖືກຕັດ.
ການຖອດລະຫັດເນື້ອຫາແບບອັດຕະໂນມັດເພີ່ມຄວາມແຕກຕ່າງອີກຢ່າງ. Content-Length ປົກກະຕິອະທິບາຍການເປັນຕົວແທນທີ່ບີບອັດ ໃນຂະນະທີ່ສະຕຣິງ PHP ອາດມີ byte ທີ່ຂະຫຍາຍແລ້ວ. ການປຽບທຽບ strlen($body) ກັບ header ນັ້ນ ຈຶ່ງເປັນການປຽບທຽບຕົວແທນທີ່ຕ່າງກັນ.
cURL ອາດລາຍງານ CURLE_PARTIAL_FILE ເມື່ອການໂອນລະເມີດຂະໜາດທີ່ຄາດໝາຍ. ຮັກສາຄວາມຜິດພາດນັ້ນ ແທນທີ່ຈະຖືວ່າຜົນອອກທີ່ບໍ່ຫວ່າງເປັນຄວາມສຳເລັດ. ກົງກັນຂ້າມ ການໂອນທີ່ສຳເລັດດ້ວຍການຕອບສະໜອງ 200 ນ້ອຍ ອາດເປັນໜ້າເວັບທັງໝົດທີ່ຕົ້ນກຳເນີດ ຫຼື proxy ເລືອກສົ່ງກັບມາ.
ສຸດທ້າຍ ກວດເນື້ອຫາທີ່ຕ້ອງການ. HTML ທີ່ cURL ເອົາມາບໍ່ໄດ້ລັນໂປຣແກຣມ JavaScript ເພື່ອເຕີມໜ້າເວັບ. ພາກສ່ວນທີ່ບຣາວເຊີສະແດງອາດບໍ່ມີໃນການຕອບສະໜອງເດີມ ເຖິງແມ່ນທຸກ byte ທີ່ສົ່ງໄປມາຮອດແລ້ວ.