Java ProxySelector: ປັບໃຫ້ເປັນປົກກະຕິຂອງພອດ HTTP ແລະ HTTPS ທີ່ຂາດຫາຍ
ປັບພອດ HTTP ທີ່ຖືກລະເວັ້ນໃຫ້ເປັນປົກກະຕິກ່ອນປຽບທຽບປາຍທາງໃນ ProxySelector ທີ່ກຳນົດເອງ, ແລະ ເກັບກົດລະບຽບ HTTP ໄວ້ນອກການເລືອກ socket ດິບ.
ກົດໜຶ່ງສົ່ງ http://reports.example:80/ ຜ່ານ proxy ແຕ່ປ່ອຍໃຫ້ http://reports.example/ ໄປໂດຍກົງ. URL ທັງສອງນັ້ນອະທິບາຍຈຸດປາຍທາງ HTTP ທຳມະດາດຽວກັນ. ຄວາມບໍ່ກົງກັນມັກເກີດຈາກການປຽບທຽບພອດທີ່ແຍກແລ້ວແບບຄັກໂຕໜັງສື.
URI.getPort() ສົ່ງຄືນ -1 ເມື່ອບໍ່ມີພອດໃນ URI. ມັນບໍ່ໄດ້ແທນຄ່າເລີ່ມຕົ້ນຂອງສະຄີມ. ນະໂຍບາຍການເສັ້ນທາງທີ່ປຽບທຽບຄ່າກັບ 80 ຈະພາດ URL ທີສອງ.
String scheme = uri.getScheme();
int port = uri.getPort();
if (port == -1) {
if ("http".equalsIgnoreCase(scheme)) port = 80;
else if ("https".equalsIgnoreCase(scheme)) port = 443;
}
ໃຊ້ການປັບເປັນປົກກະຕິດຽວກັນກັບທັງສອງດ້ານຂອງການປຽບທຽບ. ການແກ້ໄຂພຽງ URI ຂອງຄຳຮ້ອງຂໍຍັງເຮັດໃຫ້ປາຍທາງທີ່ຕັ້ງຄ່າໄວ້ມີພອດຖືກລະເວັ້ນບໍ່ກົງກັນ. ປຽບທຽບໂຮສ, ພອດທີ່ມີຜົນຈິງ ແລະ ສະຄີມທີ່ຕັ້ງໃຈ; ປະຕິເສດປາຍທາງທີ່ຜິດຮູບແບບ ຫຼື ບໍ່ມີໂຮສ ຜ່ານເສັ້ນທາງຂໍ້ຜິດພາດທີ່ກຳນົດໄວ້.
ຢ່າເຮັດໃຫ້ທຸກ callback ເປັນການຕັດສິນ HTTP
ຕົວເລືອກເລີ່ມຕົ້ນອາດຖືກສອບຖາມສຳລັບການເຊື່ອມຕໍ່ socket ດິບດ້ວຍ, ໂດຍໃຊ້ສະຄີມ socket. ການກົງກັນພຽງໂຮສ ແລະ ພອດ ບໍ່ຄວນເຮັດໃຫ້ callback ນັ້ນສົ່ງຄືນ proxy HTTP ທີ່ເຮັດສຳລັບຄຳຮ້ອງຂໍ URL. ມອບສະຄີມທີ່ບໍ່ຮອງຮັບໃຫ້ຕົວເລືອກກ່ອນໜ້າ, ຮັກສາພຶດຕິກຳທີ່ເໝາະສົມຂອງມັນ.
ຈັບຕົວເລືອກກ່ອນໜ້ານັ້ນໄວ້ກ່ອນຕິດຕັ້ງຂອງເຈົ້າ. ການຄົ້ນຫາຄ່າເລີ່ມຕົ້ນປັດຈຸບັນຈາກພາຍໃນຕົວແທນອາດພຽງແຕ່ເອີ້ນຕົວແທນອີກຄັ້ງ.
ບັນທຶກສະຄີມ, ໂຮສ, ພອດເດີມ ແລະ ພອດທີ່ມີຜົນຈິງ ເມື່ອວິເຄາະຄວາມບໍ່ກົງກັນ. ຢ່າອີງໃສ່ຕົວເລກທີ່ສັງເກດເຫັນພຽງອັນດຽວ ຫຼື ລຳດັບ callback ຂ້າມການຈັດຕັ້ງ JDK. ນະໂຍບາຍຄວນຕັດສິນຢ່າງຖືກຕ້ອງສຳລັບແຕ່ລະ URI ທີ່ໃຫ້ມາ.