Internet Windows Android
Kengaytirish

Nega xmlrpc php kerak. Dasturlash bo'yicha musobaqa

Bir necha kun oldin, men saytlarimning xosting yuklamasi keskin oshganini payqadim. Agar u odatda 100-120 "to'tiqush" (CP) mintaqasida bo'lgan bo'lsa, so'nggi bir necha kun ichida u 400-500 ga ko'tarildi. Bu erda hech qanday yaxshi narsa yo'q, chunki mezbon qimmatroq tarifga o'tishi yoki hatto saytlarga kirishni butunlay yopishi mumkin, shuning uchun men buni tushuna boshladim.

Lekin men XML-RPC funksiyasini saqlaydigan usulni tanladim: Disable XML-RPC Pingback plaginini o'rnatish. U faqat "xavfli" pingback.ping va pingback.extensions.getPingbacks usullarini o'chirib tashlaydi, bu esa XML-RPC funksiyasini buzilmagan holda qoldiradi. O'rnatishdan so'ng, plaginni faqat faollashtirish kerak - boshqa konfiguratsiya talab qilinmaydi.

Yo'l davomida men barcha tajovuzkorlarning IP manzillarini saytlarimning .htaccess fayliga kirishini to'sib qo'ydim. Men faqat faylning oxiriga qo'shdim:

5.196.5.116 37.59.120.214 92.222.35.159 dan buyruq berishga ruxsat bering

Hammasi shu, endi biz blogni xmlrpc.php yordamida keyingi hujumlardan ishonchli himoya qildik. Bizning saytlar so'rovlar bilan xostingni yuklashni, shuningdek DDoS yordamida uchinchi tomon saytlariga hujum qilishni to'xtatdi.

WordPress har doim saytingizga masofadan kirish uchun o'rnatilgan vositaga ega edi. Darhaqiqat, ba'zida siz saytingizga kirishingiz kerak bo'ladi va kompyuter sizdan uzoqda. Uzoq vaqt davomida yechim xmlrpc.php deb nomlangan fayl edi. Biroq, so'nggi yillarda bu fayl yechimdan ko'ra ko'proq muammoga aylandi.

Quyida biz xmlrpc.php va nima uchun yaratilganini batafsil ko'rib chiqamiz. Biz ham ko'rib chiqamiz umumiy muammolar WordPress xavfsizligi va ularni WordPress saytingiz uchun qanday tuzatish mumkin.

XML-RPC-bu ma'lumotlarni uzatish imkonini beruvchi WordPress xususiyati, HTTP transport va kodlash uchun XML. WordPress yopiq tizim emasligi va ko'pincha boshqa tizimlar bilan aloqa o'rnatganligi uchun bu vazifani hal qilish yo'llari topilgan.

Masalan, siz o'z saytingizda o'z saytingizdan nashr qilmoqchisiz Mobil telefon... Siz xmlrpc.php tomonidan taqdim etilgan masofaviy kirishni ishlatishingiz kerak.

Xmlrpc.php -ning asosiy funksiyasi - bu saytga smartfon orqali ulanish, boshqa saytlardan izlanishlar va havolalarni qaytarish va Jetpack plaginiga tegishli ba'zi funktsiyalarni bajarish.

Nima uchun Xmlrpc.php yaratilgan va u qanday ishlatilgan?

XML-RPC-ni joriy etish WordPress-ning dastlabki kunlarida va WordPress WordPress-dan oldin ham ancha orqaga ketadi.

Internetning dastlabki kunlarida ulanishlar juda sekin edi va Internetda yozish va chop etish jarayoni ancha murakkab va ko'p vaqt talab qilardi. O'zgartirishlarni to'g'ridan -to'g'ri brauzer orqali amalga oshirishning o'rniga, ko'pchilik ularni oflayn rejimga o'tkazdi, so'ngra o'z tarkibini nusxa ko'chirdi va joylashtirdi. Va bu jarayon idealdan uzoq edi.

Yechim (o'sha paytda) oflayn blog yuritish mijozini yaratish edi, u erda siz tarkibni tuzishingiz, keyin blogingizga ulanishingiz va uni nashr qilishingiz mumkin edi. Bu ulanish XML-RPC orqali amalga oshirildi. XML-RPC-ning asosiy funktsiyalari bilan, shunga o'xshash ulanishlardan foydalangan holda dastlabki ilovalar odamlarga WordPress saytlariga boshqa qurilmalardan kirishga ruxsat berdi.

XML-RPC bugun

2008 yilda WordPress 2.6 versiyasi bilan XML-RPC-ni yoqish va o'chirish imkoniyati mavjud edi. Biroq, WordPress iPhone ilovasi chiqarilishi bilan, XML-RPC qo'llab-quvvatlashi sukut bo'yicha yoqilgan va uni o'chirishning iloji yo'q edi. Shunday qilib, u shu kungacha saqlanib qolgan.

Albatta, bu faylning funksionalligi vaqt o'tishi bilan ancha kamaygan va fayl hajmi 83 kb dan 3 kb gacha kamaygan, endi u avvalgidek rol o'ynamaydi.

XML-RPC xususiyatlari

Yangi WordPress dasturlash interfeysi (API) yordamida biz hozirgacha XML-RPC to'liq o'chirilishini kutishimiz mumkin. Bugungi kunda bu yangi API hali sinov bosqichida va uni faqat maxsus plagin orqali yoqish mumkin.

Kelajakda API to'g'ridan -to'g'ri WordPress yadrosiga kiritilishini kutishingiz mumkin bo'lsa -da, u xmlrpc.php -dan foydalanish zaruratini butunlay yo'q qiladi.

Yangi API mukammal emas, lekin u yaxshi imkoniyat beradi ishonchli himoya xmlrpc.php -dan farqli o'laroq.

Nima uchun Xmlrpc.php o'chirilgan

XML-RPC bilan bog'liq eng katta muammo-bu xavfsizlik. Muammo to'g'ridan-to'g'ri XML-RPC bilan bog'liq emas, lekin u sizning saytingizga hujumni boshlash uchun ishlatilishi mumkin.

Albatta, siz juda ko'p himoya qila olasiz kuchli parol va WordPress plaginlari xavfsizlikni ta'minlash. Lekin eng yaxshi rejim himoya uni o'chirib qo'yadi.

XML-RPC-da o'tmishda ishlatilgan ikkita asosiy zaiflik bor.

Birinchidan, u sizning saytingizga kirish uchun qo'pol kuch hujumlaridan foydalanadi. Tajovuzkor xmlrpc.php yordamida har xil foydalanuvchi nomlari va parollar kombinatsiyasini tanlab, saytingizga kirishga harakat qiladi. Ular bir buyruq yordamida yuzlab turli parollarni sinab ko'rishlari mumkin. Bu ularga qo'pol hujumlarni aniqlaydigan va to'sadigan xavfsizlik vositalarini chetlab o'tishga imkon beradi.

Ikkinchisi, DDoS hujumi orqali saytni oflayn rejimga o'tkazish. Xakerlar WordPress postback -dan foydalanib, uni bir vaqtning o'zida minglab saytlarga yuborishadi. Bu xmlrpc.php funktsiyasi xakerlarga DDoS hujumini tarqatish uchun deyarli cheksiz ko'p IP -manzillarni beradi.

XML-RPC saytingizda ishlayotganligini tekshirish uchun uni XML-RPC Validator deb nomlangan asbob yordamida ishga tushirishingiz mumkin. Saytni asbob bilan ishga tushiring va agar sizda xato bo'lsa, sizda XML-RPC qo'llab-quvvatlashi yo'q.

Agar siz muvaffaqiyatli xabar olsangiz, xmlrpc.php -ni quyidagi ikkita yondashuvdan birini ishlatib to'xtatishingiz mumkin.

1 -usul: plagin yordamida Xmlrpc.php -ni o'chiring

WordPress saytida XML-RPC-ni o'chirib qo'yish juda oson.

Bo'limga o'ting Plaginlar ›Yangi qo'shish WordPress boshqaruv panelida. Plaginni toping XML-RPC-ni o'chirib qo'yish va uni o'rnating, u quyidagi rasmga o'xshaydi:

Plaginni faollashtiring va ishingiz tugadi. Ushbu plagin avtomatik ravishda XML-RPC-ni o'chirish uchun kerakli kodni kiritadi.

Biroq, buni unutmang o'rnatilgan plaginlar XML-RPC qismlarini ishlatishi mumkin, keyin uni o'chirib qo'yish plaginlar yoki ularning qismlari o'rtasida ziddiyatga olib kelishi va ularni ish rejimidan olib tashlashi mumkin.

Agar siz faqat o'chirishni xohlasangiz individual elementlar XML-RPC, lekin boshqa plaginlar va funktsiyalarning ishlashiga ruxsat berish uchun quyidagi plaginlarga murojaat qiling:

  • XML-RPC hujumini to'xtating. Bu plagin barcha XML-RPC hujumlarini to'xtatadi, lekin bu Jetpack va boshqa avtomatlashtirilgan vositalar va plaginlar kabi xmlrpc.php fayllariga ruxsat berib ishlashni davom ettirishga imkon beradi.
  • XML-RPC nashriyotini boshqarish. Bu sizga nazoratni saqlab qolish va masofaviy nashrdan foydalanish imkonini beradi.

2 -usul: Xmlrpc.php -ni qo'lda o'chiring

Agar siz plaginni ishlatishni xohlamasangiz va uni qo'lda qilishni xohlasangiz, ushbu yondashuvga amal qiling. U WordPress -ga o'tgunga qadar barcha kiruvchi xmlrpc.php so'rovlarini to'xtatadi.

.Htaccess faylini oching. "Show" ni yoqishingiz kerak bo'lishi mumkin yashirin fayllar'v fayl menejeri yoki faylni topish uchun FTP mijozi.

Ushbu kodni faylga joylashtiring .htaccess:

# WordPress xmlrpc.php so'rovlarini bloklash 123.123.123.123

Yakuniy fikrlar

Umuman olganda, XML-RPC sizning WordPress saytingizda masofadan nashr qilishdan kelib chiqadigan ba'zi muammolarni hal qilishning eng yaxshi yo'li edi. Biroq, yo'lda, ba'zi WordPress sayt egalari uchun juda xavfli bo'lgan xavfsizlik teshiklari bo'lgan.

Saytingizni xavfsiz saqlash uchun masofadan nashr qilish va Jetpack plaginlari uchun zarur bo'lgan ba'zi funktsiyalar kerak bo'lmaguncha, xmlrpc.php -ni to'liq o'chirib qo'yish tavsiya etiladi. Keyin xavfsizlik teshiklarini tuzatishda ushbu xususiyatlardan foydalanishga imkon beradigan vaqtinchalik plaginlardan foydalanishingiz mumkin.

Vaqt o'tishi bilan biz XML-RPC funktsiyalari birlashtirilishini kutishimiz mumkin yangi WordPress Qo'llab -quvvatlaydigan API masofadan kirish xavfsizlikni buzmasdan.

Siz plagin yoki qo'lda XML-RPC-ga kirishni blokladingizmi? Yoki ilgari faol bo'lganligi sababli xavfsizlik bilan bog'liq muammolar bo'lganmi? O'z tajribangizni quyidagi izohlarda baham ko'ring.


Uning xabari shuningdek, quyida ko'rsatilgandek, brauzer autentifikatsiyasini qanday qilishni ko'rsatadi:
$ request = xmlrpc_encode_request ("methodName", qator ("methodParam")));
$ auth = base64_encode ($ foydalanuvchi nomi. ":". $ parol);
$ header = (version_compare (phpversion (), "5.2.8"))
? qator ("Kontent turi: matn / xml", "Avtorizatsiya: asosiy $ auth")
: "Kontent turi: matn / xml \ r \ nAvtorizatsiya: asosiy$ auth "; //
$ context = stream_context_create (qator ("http" => qator (
"method" => "POST",
"header" => $ header,
"content" => $ so'rovi
)));
$ webservice = "http://www.example.com/rpc";
$ file = file_get_contents ($ webservice, false, $ context);
$ javob = xmlrpc_decode ($ fayl);
agar (xmlrpc_is_fault ($ javob))) (
qaytarish "xmlrpc: $ javob [errorString] ($ javob [xatoCode])";
) boshqa (
$ javobini qaytarish;
}
?>
1 - tahrirlovchining izohi: bu "SandersWang dt php at gmail dot com" dan tuzatish.

16 yil oldin

Ikkilik satrlar (xmlrpc_set_type bilan o'rnatiladi) a ga kiradi ...Siz kutgandek blokirovka qilishingiz mumkin. Lekin har 80-chi belgidan so'ng, bu funktsiya "xml" ob'ektini qo'shadi, bu Unicode-ning yangi qatori, xuddi chiziqni o'rashga olib keladi, bema'nilik.

Achchiq bo'lsa ham, bu ba'zi XML-RPC serverlari uchun haqiqiy muammolarni keltirib chiqaradi, masalan http://jakarta.apache.org/xmlrpc/ (nee Helma). Bu ob'ektlarni shunga o'xshash narsalar bilan olib tashlash

$ req = preg_replace (" / /", "", xmlrpc_encode_request ("my.method", $ args));

muammo atrofida ishlaydi.

11 yil oldin

Shuni ta'kidlash kerakki, kodlash hech narsani kodlamaydi, faqat XML sarlavhasiga nima kirishini aniqlang.

Bu funktsiyadan foydalanganda ikkita kodlangan UTF satrlarini ma'lumotlar bazasiga saqlash, uni apache xml-rpc servletiga yuborish va mysql ma'lumotlar bazasida saqlash bilan bog'liq muammolarga duch keldik. Bu "qochish" ni faqat "belgilash" va "kodlashni" "UTF-8" ga o'rnatish orqali hal qilindi (xmlrpc_decode-da "utf-8" ni o'rnatishni unutmang).

Aftidan, UTF-8 kodlangan satrlar o'z baytlari bilan belgi o'rniga, ob'ekt sifatida saqlanadi.

9 yil oldin

Hech qachon xmlrpc bilan quyidagi kabi qatorni uzatishga harakat qilganmisiz?
$ var1 = qator (7 => 14.9 => 18);

Chiqish qatori butunlay boshqacha ko'rinadi! Bu shunday ko'rinadi:
$ var2 = qator (14,18);

Men topgan yagona echim - indeksga bo'sh joy ajratish:
$ var3 = qator ("7" => 14, "9" => 18);

Ushbu usuldan foydalansangiz, to'g'ri natijaga erishasiz. ($ Var1)

16 yil oldin

Bu funksiya XML-RPC mijozi tomonidan XML-RPC so'rovi uchun XML yukini yaratish uchun ishlatilishi kerak;

$ params = "system.methodSignature";
$ usuli = "system.methodHelp";
$ request = xmlrpc_encode_request ($ usuli, $ params);
echo ($ so'rov);
?>

Ishlab chiqaradi;



system.methodHelp

tizim.metod Imzo



Ikkinchi dalil o'zgaruvchining turini tan oladi va to'g'ri XML-RPC tuzilishini yaratadi. Qo'shimcha ma'lumot olish uchun xmlrpc_encode () ga qarang.

12 yil oldin

Haddan tashqari yuklangan oddiy OO mijozi:

php metho test_helloworld xmlrpc test.helloworld usuliga tarjima qilingan.

sinf RpcClient (

Xususiy $ _ usullari;
shaxsiy $ _context;
shaxsiy $ _url;

__Construct funktsiyasi ($ url, $ user, $ passwd) (
$ auth = base64_encode (sprintf ("% s:% s", $ user, $ passwd));
$ this -> _ context = stream_context_create (qator (
"http" => qator (
"method" => "POST",
"header" => "Kontent turi: text / xml \ r \ n".
"Avtorizatsiya: asosiy $ auth",

)
));
$ this -> _ url = $ url;

$ this-> registerMethod ("Test_HelloWorld");

__Call funktsiyasi ($ methodName, $ params) (
agar (array_key_exists ($ methodName, $ this -> _ usullari)))
// appelle la fonction RPC bo'yicha
$ m = str_replace ("_", ".", $ methodName);
$ r = xmlrpc_encode_request ($ m, $ params, array ("verbosity" => "newlines_only"));
$ c = $ this -> _ kontekst;
stream_context_set_option ($ c, "http", "kontent", $ r);
$ f = file_get_contents ($ this -> _ url, false, $ c);
$ resp = xmlrpc_decode ($ f);
$ resp qaytarish;
) boshqa (
// appelle la fonction de l "objet
call_user_method_array ($ methodName, $ this, $ params);
}
}

RegisterMethod xususiy funktsiyasi ($ usuli) (
$ this -> _ usullari [$ method] = rost;
}

Shanba kuni tushdan keyin Wordpress -da 25 ga yaqin sayt joylashgan mening serverimda yovvoyi tormozlar boshlandi. Men oldingi hujumlardan (,) sezilmasdan omon qolishga muvaffaq bo'lganim uchun, nima bo'lganini darhol tushunmadim.

Men tushundimki, qo'pol kuch hujumi + XMLRPCga ko'plab so'rovlar bo'lgan.

Natijada, darhol bo'lmasa ham, hammasini kesib tashlash mumkin edi. Buning oldini olish uchun uchta oddiy fokus mavjud.

Bu usullarni hamma bilishi mumkin, lekin men tavsiflarda topmagan bir nechta tizmalarni bosdim - bu kimgadir vaqtni tejab qolsa nima bo'ladi?

1. Kirish urinishlarini cheklash plaginini to'xtating - uni aniq o'rnating, chunki boshqa himoya vositalari serverni to'xtatadi, masalan, Login Security Solution plaginidan foydalanganda, server yarim soatdan keyin vafot etadi, plagin ma'lumotlar bazasini yuklaydi. .

Sozlamalarda "Proksi uchun" katakchasini yoqganingizga ishonch hosil qiling - aks holda u sizning serveringizning IP -manzilini hamma uchun belgilaydi va barchani avtomatik ravishda bloklaydi.
UPDATE, rahmat, tafsilotlar quyidagi izohlarda - biz "Proksi uchun" katakchasini yoqamiz, agar "To'g'ridan -to'g'ri ulanish" yoqilganda ta'rif ishlamasa.

2. XML-RPC-ni o'chirib qo'yish-XML-RPC plaginini o'chirish (faqat uni faollashtiring va hammasi shu).

3. Wp -login.php -ni yoping - agar siz saytga ip orqali kirsangiz, plagin ishlamaydi va yig'uvchilar saytni urishda davom etishadi. Bunga yo'l qo'ymaslik uchun .htaccess -ga qo'shing:

Buyruqdan voz keching, hammasidan rad etishga ruxsat bering

Wp-login faylini nusxa ko'chiring, uni har qanday g'alati nomga o'zgartiring, masalan, poletnormalny.php va wp-login.php-ning barcha teglarini avtomatik tuzatish yordamida fayl ichidagi poletnormalny.php-ga o'zgartiring.
Hammasi shu, endi siz boshqaruv paneliga faqat faylingiz orqali kira olasiz.

Ushbu 3 oddiy qadamdan so'ng, saytlar yana ucha boshladi va tinchlik keldi.

Xo'sh, to'satdan bu qiziq

Variantlardan biri sizga hujum qilinayotganini qanday ko'rish mumkin. Buni nginx jurnallarida ko'rish mumkin (masalan, Debian / var / log / nginx access.log faylining yo'li).

XML-RPC-ga kirish

Internetda foydalanuvchilarga aniq ma'lumotlarni taqdim etadigan turli xil manbalar mavjud. Bu oddiy degani emas statik sahifalar, lekin, masalan, ma'lumotlar bazasi yoki arxivdan olingan ma'lumotlar. Bu moliyaviy ma'lumotlarning arxivi bo'lishi mumkin (valyuta kurslari, aksiyalar kotirovkalari ma'lumotlari), ob -havo ma'lumotlari yoki boshqa katta hajmli ma'lumotlar - yangiliklar, maqolalar, forumlardan xabarlar. Bunday ma'lumotlar sahifa tashrif buyuruvchisiga, masalan, ariza orqali, so'rovga javob sifatida taqdim etilishi yoki har safar dinamik tarzda shakllantirilishi mumkin. Ammo qiyinchilik shundaki, ko'pincha bunday ma'lumot oxirgi foydalanuvchiga emas, balki boshqa tizimlar kabi, bu ma'lumotni o'z hisob -kitoblari yoki boshqa ehtiyojlari uchun ishlatadigan dasturlarga ham kerak bo'ladi.

Haqiqiy misol: bank veb -saytining valyuta kotirovkalarini aks ettiruvchi sahifasi. Agar siz sahifaga tashrif buyursangiz oddiy foydalanuvchi, brauzer orqali siz sahifaning barcha dizaynini, bannerlarni, menyularni va qidiruvning asl maqsadini "ramka" qiladigan boshqa ma'lumotlarni ko'rasiz - valyuta tirnoqlari. Agar siz ushbu tirnoqlarni onlayn -do'koningizga kiritishingiz kerak bo'lsa, unda kerakli ma'lumotlarni qo'lda tanlash va vaqtinchalik bufer orqali veb -saytingizga o'tkazishdan boshqa ish yo'q. Va buni har kuni qilish kerak. Haqiqatan ham chiqishning iloji yo'qmi?

Agar siz muammoni "boshdan-oyoq" hal qilsangiz, darhol echim o'zini taklif qiladi: ma'lumotga muhtoj bo'lgan dastur (saytdagi skript) serverdan sahifani "oddiy foydalanuvchi" sifatida oladi, olinganlarni tahlil qiladi (tahlil qiladi). html-kod va undan kerakli ma'lumotlarni chiqaradi. Buni odatdagidek qilish mumkin muntazam ifoda yoki har qanday html parseridan foydalanish. Usulning murakkabligi uning samarasizligidadir. Birinchidan, ma'lumotlarning kichik qismini olish uchun (valyutalar to'g'risidagi ma'lumotlar tom ma'noda o'n ikki belgidan iborat), siz butun sahifani olishingiz kerak, bu kamida bir necha o'n kilobayt. Ikkinchidan, sahifa kodining har qanday o'zgarishi bilan, masalan, dizayn o'zgargan yoki boshqa biror narsa bo'lsa, bizning tahlil algoritmini qayta o'zgartirish kerak bo'ladi. Va buning uchun juda ko'p resurs kerak bo'ladi.

Shunday qilib, ishlab chiquvchilar shunday qarorga kelishdi - shaffof (protokol va axborot uzatish darajasida) va har qanday joyda joylashgan, istalgan tilda yoziladigan va ma'lumot almashish imkonini beradigan universal mexanizmni ishlab chiqish kerak. har kimning nazorati ostida ishlash operatsion tizim va har qanday apparat platformasida. Bunday mexanizm hozirda "Veb-xizmatlar", "SOAP", "Xizmatga yo'naltirilgan arxitektura" deb nomlangan. Ma'lumot almashish uchun ochiq va vaqt sinovidan o'tgan standartlar qo'llaniladi - xabarlarni uzatish uchun HTTP protokoli (garchi boshqa protokollardan foydalanish mumkin bo'lsa - masalan, SMTP). Ma'lumotlarning o'zi (bizning misolimizda, valyuta kurslari) o'zaro platformali formatda - XML ​​hujjatlari ko'rinishida uzatiladi. Buning uchun maxsus standart - SOAP ixtiro qilingan.

Ha, endi veb -xizmatlar, SOAP va XML har kimning og'zida, ular faol ravishda joriy etila boshlandi va IBM va Microsoft kabi yirik korporatsiyalar veb -xizmatlarning umumiy qabul qilinishiga yordam beradigan yangi mahsulotlarni chiqarmoqda.

Lekin! Bizning misolimiz uchun, bank veb -saytidan onlayn -do'kon dvigateliga o'tkazilishi kerak bo'lgan valyuta kurslari bilan, bunday qaror juda qiyin bo'ladi. Axir, SOAP standartining ta'rifi bir yarim ming sahifani o'z ichiga oladi va bu hammasi emas. Uchun amaliy foydalanish siz uchinchi tomon kutubxonalari va kengaytmalari bilan ishlashni o'rganishingiz kerak bo'ladi (faqat PHP 5.0 SOAP bilan ishlash kutubxonasini o'z ichiga oladi), kodingizning yuzlab va minglab satrlarini yozing. Va bularning barchasi bir nechta harflar va raqamlarni olish uchun, albatta, juda o'ychan va mantiqsizdir.

Shunday qilib, ma'lumot almashishning yana bir standarti - XML ​​-RPC. U Microsoft ishtirokida UserLand Software Inc tomonidan ishlab chiqilgan va Internet orqali ilovalar o'rtasida ma'lumotlarni yagona uzatish uchun mo'ljallangan. Haqiqiy veb -xizmatlarning "korporativ" imkoniyatlariga muhtoj bo'lmagan oddiy xizmatlarni qurishda u SOAPni almashtirishi mumkin.

XML-RPC nimani anglatadi? RPC masofaviy protsessual qo'ng'iroqni anglatadi - masofadan qo'ng'iroq protseduralar. Bu shuni anglatadiki, dastur (skript serverda yoki muhim emas oddiy dastur mijoz kompyuterida) boshqa kompyuterda jismonan joriy qilingan va bajariladigan usuldan shaffof foydalanishi mumkin. XML bu erda ta'minlash uchun ishlatiladi universal format uzatilgan ma'lumotlarning tavsifi. HTTP protokoli transport sifatida har qanday tarmoq qurilmalari - yo'riqnoma, xavfsizlik devori, proksi -server orqali erkin almashish imkonini beruvchi xabarlarni uzatish uchun ishlatiladi.

Shunday qilib, foydalanish uchun sizga kerak: bitta yoki bir nechta usullarni ta'minlaydigan XML-RPC serveri, to'g'ri so'rovni tuzadigan va server javobini qayta ishlaydigan XML-RPC mijozi, shuningdek muvaffaqiyatli ishlashi uchun zarur bo'lgan server parametrlarini biladigan. operatsiya - manzil, usul nomi va boshqalar o'tgan parametrlar.

Вся работа с XML-RPC происходит в режиме "запрос-ответ", в этом и есть одно из отличий технологии от стандарта SOAP, где есть и понятия транзакций, и возможность делать отложенные вызовы (когда сервер сохраняет запрос и отвечает на него в определенное время kelajakda). Bular qo'shimcha funktsiyalar kuchli korporativ xizmatlar uchun foydalidir, ular serverlarni ishlab chiqish va qo'llab -quvvatlashni sezilarli darajada murakkablashtiradi va mijozlar echimlarini ishlab chiquvchilarga qo'shimcha talablar qo'yadi.

XML-RPC bilan ishlash tartibi so'rovni shakllantirishdan boshlanadi. Oddiy so'rov quyidagicha ko'rinadi:

POST / RPC2 HTTP / 1.0
Foydalanuvchi-agent: eshop-test / 1.1.1 (FreeBSD)
Xost: server.localnet.com
Kontent turi: matn / xml
Tarkibning davomiyligi: 172



TestMetod
Salom XML-RPC!


Birinchi qatorlar standart sarlavhani tashkil qiladi HTTP so'rovi POST. Kerakli parametrlarga host, ma'lumotlar turi (MIME turi) kiradi, ular matn / xml bo'lishi kerak va xabarning uzunligi. Standart shuningdek, User-Agent maydonini to'ldirish kerakligini bildiradi, lekin unda ixtiyoriy qiymat bo'lishi mumkin.

Keyin XML hujjatining odatiy sarlavhasi keladi. So'rovning asosiy elementi , faqat bitta bo'lishi mumkin va bolalar kabi tugunlarni o'z ichiga olmaydi. Bu shuni anglatadiki, bitta so'rov serverda faqat bitta usulni chaqira oladi.

Chiziq TestMetod biz TestMetod nomli usulni chaqirayotganimizni ko'rsatadi. Agar kerak bo'lsa, bu erda siz usulni o'z ichiga olgan dastur yoki modul nomini, shuningdek unga yo'lni belgilashingiz mumkin. XML-RPC spetsifikatsiyasi usulni ko'rsatish uchun ishlatilishi mumkin bo'lgan belgilar to'plamiga ba'zi cheklovlar qo'ygan bo'lsa-da, ularni qanday izohlash butunlay serverning bajarilishiga bog'liq.

Keyin uzatiladigan parametrlar o'rnatiladi. Bu bo'limda amalga oshiriladi U o'zboshimchalik bilan kichik elementlarni o'z ichiga olishi mumkin Teg tasvirlangan parametrni o'z ichiga oladi ... Biz parametrlar va ma'lumotlar turlarini biroz keyinroq ko'rib chiqamiz. Bizning versiyamizda, usulda teg bilan o'ralgan bitta simli parametr o'tkaziladi .

Barcha parametrlar tavsiflangandan so'ng, yopish teglari mavjud. XML-RPC-da so'rov va javob oddiy XML hujjatlari, shuning uchun barcha teglar yopiq bo'lishi kerak. Ammo XML-RPC-da yagona teglar yo'q, lekin ular XML standartida mavjud.

Endi server javobini tahlil qilaylik. HTTP javob sarlavhasi normaldir, agar so'rov muvaffaqiyatli bajarilsa, server HTTP / 1.1 200 OK javobini qaytaradi. Xuddi so'rovda bo'lgani kabi, siz MIME turini, xabar uzunligini va javob sanasini to'g'ri ko'rsatishingiz kerak.

Javob berish organining o'zi quyidagicha:



rost


Endi ildiz tagining o'rniga teg ko'rsatilgan , unda so'rovlarni qayta ishlash natijalari darhol ilova qilinadi. Afsuski, javob usulning nomidan o'tmaydi, shuning uchun bir vaqtning o'zida turli xil usullar chaqirilsa, chalkashliklarga yo'l qo'ymaslik uchun uni mijoz tomonida saqlashingiz kerak.

Agar so'rovingizni qayta ishlashda xatolik yuz bersa Javob elementni o'z ichiga oladi , unda xatoni tavsiflovchi tuzilma joylashtiriladi. Xato tavsifida raqamli xato kodi va matn tavsifi mavjud.

Keling, XML-RPC-dagi ma'lumotlar turlarini tezda ko'rib chiqaylik. Ma'lumotlarning jami 9 turi mavjud - etti oddiy va 2 murakkab. Har bir tur o'ziga xos teg yoki teglar to'plami bilan tavsiflanadi (murakkab turlar uchun).

Oddiy turlari:

Butun raqamlar- teg yoki ;

Boolean turi- teg , 0/1 yoki rost / noto'g'ri bo'lishi mumkin;

ASCII qatori- yorliq bilan tasvirlangan va ixtiyoriy belgilar qatorini o'z ichiga olishi mumkin;

O'zgaruvchan nuqta raqamlari- teg , shuningdek, raqam belgisini o'z ichiga olishi mumkin, kasr qismi nuqta bilan ajratilgan;

sana va vaqt- yorliq bilan tasvirlangan va iso8601 formatiga mos kelishi kerak. Skriptlarda qayta ishlash uchun bu format biroz noqulay, shuning uchun u har doim so'rov yuborish / qabul qilishda o'zgartiriladi. Buni kutubxonadagi maxsus funksiya bajarishi mumkin, yoki bunday funksiya bo'lmasa, ishlab chiquvchi sanani qo'lda o'zgartirishi kerak.

Oxirgi oddiy turi base64 kodlangan satr bu teg bilan tasvirlangan ... Bu tip universaldir, uning yordamida siz mijoz va server o'rtasida istalgan ma'lumotlarni uzatishingiz mumkin, garchi bu kodlash tufayli uzatiladigan ma'lumotlar miqdori oshsa. Ammo bu protokolning matnli tabiatining natijasidir XML formati jumladan.

Murakkab turlar tuzilmalar va massivlar bilan ifodalanadi. Tuzilishi ildiz elementi bilan belgilanadi o'zboshimchalik bilan ko'plab elementlarni o'z ichiga olishi mumkin strukturaning har bir a'zosini aniqlash. Strukturaning a'zosi ikkita teg bilan tavsiflanadi: birinchisi, , a'zoning ismini tasvirlaydi, ikkinchisi, , a'zo qiymatini o'z ichiga oladi (ma'lumotlar turini tavsiflovchi teg bilan birga).

Massivlarning nomlari yo'q va ular yorliq bilan tasvirlangan u bitta elementni o'z ichiga oladi va bir yoki bir nechta bolalar elementlari bu erda aniq ma'lumotlar ko'rsatilgan. Massiv har xil tartibda boshqa turlarni ham o'z ichiga olishi mumkin, bu sizga ko'p o'lchovli massivlarni ta'riflashga imkon beradi. Siz shuningdek, bir qator tuzilmalarni tasvirlashingiz mumkin. Ammo massivning nomga ega emasligi ba'zi hollarda uni ishlatishni murakkablashtiradi; murakkab ma'lumotlarni uzatish uchun ularni qayta -qayta boshqa turlarga joylashtirish kerak bo'ladi (masalan, bir nechta massivlarni uzatish uchun har bir massivni alohida tuzilishga yig'ish mumkin). va keyin bu tuzilmalardan bitta qator yarating).

Albatta, kimdir bunday turdagi ma'lumotlar ro'yxati juda yomon va "kengaytirishga ruxsat bermaydi" deb aytadi. Ha, agar sizga murakkab ob'ektlar yoki katta hajmdagi ma'lumotlarni uzatish kerak bo'lsa, u holda SOAP dan foydalanish yaxshiroqdir. Kichkina, oddiy bo'lmagan ilovalar uchun XML-RPC juda mos keladi, bundan tashqari, ko'pincha uning imkoniyatlari juda ko'p! Joylashtirish qulayligini hisobga olsak ko'p miqdorda deyarli har qanday til va platformalar uchun kutubxonalar, PHP-da keng qo'llab-quvvatlash, keyin XML-RPC ko'pincha raqobatchilarga ega bo'lmaydi. Uni universal echim sifatida darhol maslahat berishning iloji bo'lmasa -da, har bir holatda vaziyatga qarab qaror qabul qilish kerak.