Oxirgi xabar Men HttpsURLConnection va HTTP protokoli xabarlari haqida xabar berish uchun asosiy rozetkaga qo'ng'iroqlarni qanday qilib to'xtatish mumkinligi haqida gapirdim. Ushbu postda men Java-da HttpURLConnection (va shuning uchun undan kelib chiqadigan HttpsURLConnection) HTTP PATCH usulida belgilangan HTTP PATCH usulini qo'llab-quvvatlamaydigan Java-dagi boshqa kamchilikni qanday hal qilishni tushuntiraman. RFC5789.
Muhim muammo bu ishlamayotganligidan kelib chiqadi:
URL url = yangi URL("https://localhost");
HttpURLCulanish con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("PATCH");
U ProtocolException ni chiqaradi. Bu erda statik o'zgaruvchilar va usul uchun JDK manba kodi:
/* amaldagi HTTP usullari */
xususiy statik final String[] usullari = {
"OLING", "POST", "BOSH", "VARITALAR", "QO'YISH", "O'chirish", "IZ"
};
/**
* URL so'rovi uchun usulni o'rnating, ulardan biri:
*
* OLISH
* POST
* BOSH
* VARIANTLAR
* PUT
* OʻCHIRISH
* IZ
* Protokol cheklovlari bilan qonuniydir. Standart
* usuli - GET.
* @param HTTP usuli
* @istisno ProtocolException agar usul qayta o'rnatilmasa yoki agar
* talab qilingan usul HTTP uchun yaroqsiz.
* @istisno SecurityException, agar xavfsizlik menejeri o'rnatilgan bo'lsa va
* usuli "TRACE", lekin "allowHttpTrace"
* NetPermission berilmagan.
* @qarang #getRequestMethod()
*/
ommaviy bekor setRequestMethod(String usuli) tashlaydi ProtocolException {
agar (ulangan) {
tashlash yangi ProtocolException("Usulni qayta tiklab bo'lmadi: allaqachon ulangan");
}
// Ushbu cheklov odamlarning ushbu sinfdan foydalanishiga to'sqinlik qiladi
// java yordamida yangi HTTP usullari bilan tajriba. Lekin shunday bo'lishi kerak
// xavfsizlik uchun joylashtiriladi - so'rov String bo'lishi mumkin
// o'zboshimchalik bilan uzoq.
uchun (int i = 0; i < usullari.uzunligi; i++) {
agar (usullari[i].teng(usuli)) {
agar (usuli.teng("IZ")) {
Xavfsizlik menejeri s = Tizim.getSecurityManager();
agar (s != null) {
s.checkPermission(yangi NetPermission("allowHttpTrace")))
}
}
bu.usuli = usuli;
qaytish;
}
}
tashlash yangi ProtocolException("Yaroqsiz HTTP usuli:" + usuli);
}
Dasturchi nima qilishi kerak? HttpsURLConnection o'rniga ulanish uchun muqobil dasturdan foydalanishingiz mumkin. Ba'zi alternativlar o'z ichiga oladi Apache HTTP mijoziva Bahorning dam olish shabloni.
Ba'zida muqobildan foydalanish tanlov emas (masalan, asosiy kutubxona undan foydalansa va siz amalga oshirishni o'zgartira olmasangiz). Mening alohida vaziyatimda men bilan tajriba o'tkazdim tus-java-mijoz bilan gaplashmoq SIZ a ga ma'lumotlarni yuborish bilan tajriba o'tkazish uchun server DEX oxirgi nuqtasi.
Java tus mijozi HttpURLConnection-dan foydalanadi va ba'zi serverlarga yoqmasligi mumkin X-HTTP-Metod-O'chirish dan kutilgan foydalanish bilan ushbu muammoni hal qilish uchun kiritilgan sarlavha PATCH.
Bir oz Googling bir nechta turli xil echimlarni taklif qiladi, ulardan birini men dasturni ishga tushirish paytida chaqirilgan statik usulda amalga oshirdim.
xususiy statik bekor patchThePatch() {
harakat qilib ko'ring {
String[] usullar = { "PATCH" };
Maydon usullariField = HttpURLConnection.sinf.getDeclaredField("usullar");
Field modifiersField = Field.sinf.getDeclaredField("modifikatorlar");
modifiersField.setAccessible(rost);
modifiersField.setInt(methodsField, methodsField.getModifiers() & ~Modifier.FINAL);
MethodsField.setAccessible(rost);
String[] oldMethods = (String[]) usullarField.get(null);
Set
methodSet.addAll(Arrays.asList(metodlar));
String[] newMethods = methodsSet.toArray(yangi String[0]);
methodField.set(null/*statik maydon*/yangi usullar);
URL url = yangi URL("https://localhost");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("PATCH");
// Keshlashni o'chirib qo'ying
con.setDefaultUseCaches(yolg'on);
LOGGER.info("PATCH HttpURLConnection da yangilandi");
} tutmoq (Istisnodan istisno) {
LOGGER.info("HttpURLConnection-ni PATCHni qabul qilish uchun sozlab bo‘lmadi: {}"ex.getMessage(), ex);
}
}
Ushbu kod quyidagilardan ilhomlangan:
https://stackoverflow.com/questions/25163131/httpurlconnection-yaroqsiz-http-usuli-yamoq/40606633#40606633
Agar siz JDK-dan JDK-11 dan kechroq foydalanayotgan bo'lsangiz, quyidagilarni ko'rib chiqishingiz mumkin:
https://stackoverflow.com/questions/56039341/get-e'lon qilingan-dalalar-ning-java-lang-aks ettirish-dalalar-ichida-jdk12












![Sog’liqni saqlashda ma’naviyat kuchini ochish [PODCAST]](/_next/image/?url=https%3A%2F%2Fbackend.kasallik.uz%2Fwp-content%2Fuploads%2F2023%2F05%2FUnveiling-the-power-of-spirituality-in-health-care.jpg&w=3840&q=75)
Javoblar (0 )