internetul Windows. Android

De ce aveți nevoie de fișierul XMLRPC PHP. Competiții de programare

Cu câteva zile în urmă am observat că încărcătura site-urilor mele pe găzduirea a crescut uneori. Dacă, de obicei, în regiunea a 100-120 "papagali" (CP), atunci în ultimele zile a crescut la 400-500 CP. Nu este nimic bun în acest sens, deoarece host-ul poate traduce într-un tarif mai scump și chiar acoperă accesul la site-uri deloc, așa că am început să înțeleg.

Dar am ales o metodă care vă permite să salvați funcționalitatea XML-RPC: Instalarea pluginului de dezactivare XML-RPC Pingback. Șterge numai metodele "periculoase" Pingback.Ping și Pingback.extensions.getingbacks, lăsând funcționalitatea XML-RPC. După instalarea pluginului trebuie doar să activați - nu este necesară o altă configurație.

Pe parcurs, am marcat toate atacatorii IP la File.htaccess site-urile mele pentru a le bloca accesul. Tocmai ați terminat la sfârșitul fișierului:

Comandați toate Negru de la 5.196.5.116 37.59.120.214 92.222.35.159

Asta-i tot, acum am protejat în siguranță blogul de la atacuri ulterioare folosind XMLRPC.PHP. Site-urile noastre au oprit transportul de către solicitări, precum și atacul cu site-urile terță parte DDOS.

WordPress a fost întotdeauna un instrument încorporat pentru accesul la distanță la site-ul dvs. Într-adevăr, uneori trebuie să ajungeți la site-ul dvs., iar computerul este departe de dvs. Pentru o lungă perioadă de timp, soluția a fost depusă de xmlrpc.php. Cu toate acestea, ultimii ani, acest fișier a devenit o problemă mai mare decât soluția.

Mai jos vom discerne xmlrpc.php și de ce a fost creat. De asemenea, vom lua în considerare problemele de securitate comune pe care le poate provoca și cum să le remedieze pentru site-ul dvs. pe WordPress.

XML-RPC este o funcție WordPress, care vă permite să transmiteți datele de la HTTP proeminent ca transport și XML - pentru codificare. Deoarece WordPress nu este un sistem închis și adesea comunică cu alte sisteme, au fost găsite soluții pentru această sarcină.

De exemplu, să spunem că doriți să publicați pe site-ul dvs. de pe telefonul dvs. mobil. Trebuie să utilizați accesul la distanță oferit de XMLRPC.PHP.

Principalul XMLRPC.Php este capacitatea de a se conecta la site-ul de pe smartphone, implementarea TRACKBakes și Linkbies din alte site-uri și unele funcții asociate cu pluginul JetPack.

De ce a fost creată xmlrpc.php și cum a fost folosit?

Implementarea XML-RPC merge departe în primele zile de WordPress și chiar înainte ca WordPress să devină WordPress.

Revenind în acele zile când a apărut recent internetul, conexiunile au fost foarte lente, iar procesul de înregistrare și publicarea pe web a fost mult mai dificil și mai mult timp. În loc să faceți modificări imediat prin browser, majoritatea le-a făcut în linie și apoi a copiat și a introdus conținutul online. Și acest proces a fost departe de ideal.

Soluția (în acel moment) a fost crearea unui client pentru blogging offline, unde puteți să vă completați conținutul, apoi să vă conectați la blogul dvs. și să îl publicați. Această conexiune a fost efectuată prin XML-RPC. Cu cea principală funcționalitate a RPC XML, aplicațiile timpurii care utilizează conexiuni similare au oferit persoanelor posibilitatea de a introduce site-urile WordPress de la alte dispozitive.

XML RPC astăzi

În 2008, cu versiunea 2.6 WordPress, a apărut opțiunea XML-RPC ON și OFF. Cu toate acestea, cu eliberarea aplicației WordPress pentru iPhone, suportul XML-RPC a fost activat în mod implicit și nu a existat posibilitatea de a închide. Deci rămâne și astăzi.

Desigur, funcționalitatea oferită de acest fișier a scăzut semnificativ în timp, iar dimensiunea fișierului a scăzut de la 83kb la 3kb, nu mai joacă un astfel de rol ca înainte.

Proprietăți XML-RPC

Cu o nouă interfață de programare a aplicației WordPress (API), ne putem aștepta ca XML-RPC să fie complet dezactivată. Astăzi, acest API nou este încă în stadiul de testare și poate fi inclus doar printr-un plugin special.

Deși vă puteți aștepta la API direct în kernelul WordPress în viitor, care elimină complet necesitatea de a utiliza xmlrpc.php.

Noul API nu este perfect, dar oferă o protecție bună, spre deosebire de XMLRPC.PHP.

De ce dezactivați xmlrpc.php.

Cea mai mare problemă asociată cu XML-RPC este siguranța. Problema nu este direct legată de XML-RPC, dar poate fi folosit pentru a porni atacul pe site-ul dvs.

Desigur, puteți proteja o parolă de parolă foarte fiabilă și pluginuri WordPress care asigură siguranța. Dar modul cel mai bun de protecție va opri pur și simplu.

Există două deficiențe principale ale XML-RPC, care au fost utilizate în trecut.

Primul - utilizează atacul prin selectarea directă a parolei (atacuri de forță brute) pentru a avea acces la site-ul dvs. Atacarea va încerca să acceseze site-ul dvs. utilizând XMLRPC.PHP Selectarea diferitelor combinații de nume de utilizator și parole. Ele pot folosi eficient o echipă pentru testarea a sute de parole diferite. Acest lucru le permite să ocolească instrumentele de securitate care de obicei detectează și blochează atacurile de selecție directă.

Al doilea - traducerea site-ului la offline prin atacul DDOS. Hackerii vor folosi anunțul din spate în WordPress pentru a trimite în același timp mii de site-uri. Această funcționalitate XMLRPC.php oferă hackerilor o cantitate aproape infinită de adrese IP pentru a distribui atacul DDOS.

Pentru a verifica dacă XML-RPC funcționează pe site-ul dvs., îl puteți rula utilizând instrumentul numit Validator XML-RPC. Rulați site-ul dvs. utilizând instrumentul și dacă primiți un mesaj de eroare, înseamnă că nu aveți suport XML-RPC.

Dacă primiți un mesaj de finalizare de succes, puteți opri XMLRPC.Php una din două abordări de mai jos.

Metoda 1: Deconectarea xmlrpc.php cu plugin

Dezactivați XML-RPC pe site-ul WordPress este incredibil de ușor.

Du-te la secțiunea. Plugins\u003e Adăugați noi În consola dvs. de administrare WordPress. Găsiți pluginul Dezactivați XML-RPC Și instalați-l, se pare că în imaginea de mai jos:

Activați pluginul și totul este gata. Acest plugin va introduce automat codul necesar pentru a dezactiva XML-RPC.

Cu toate acestea, amintiți-vă că pluginurile instalate pot folosi părți ale XML-RPC, iar apoi închiderea sa poate provoca un conflict de plug-in-uri sau părți individuale și ieșire din modul de funcționare.

Dacă doriți doar să dezactivați elementele individuale XML-RPC, dar permiteți alte pluginuri și funcții la lucru, apoi consultați astfel de pluginuri:

  • Opriți atacul XML-RPC. Acest plugin oprește toate atacurile XML-RPC, dar este permisă continuarea funcționării unor astfel de pluginuri ca JetPack și alte instrumente și pluginuri automate, oferindu-le acces la fișierele XMLRPC.php.
  • Controlați publicarea XML-RPC. Acest lucru vă permite să salvați controlul și să utilizați publicarea de la distanță.

Metoda 2: Deconectați manual XMLRPC.Php

Dacă nu doriți să utilizați pluginul și preferați să o faceți manual, urmați această abordare. Acesta va opri toate cererile XMLRPC.php primite înainte de a fi transferate la WordPress.

Deschide fișierul .htaccess. Este posibil să trebuiască să activați "Afișați fișiere ascunse" în managerul de fișiere sau clientul FTP pentru a găsi acest fișier.

Introduceți acest cod în fișier .htaccess.:

# Block wordpress xmlrpc.php cereri Ordinea neagră, permiterea de a lăsa să permită de la 123.123.123.123

Gândurile finale

În general, XML-RPC a fost o soluție bună pentru unele probleme care au apărut din cauza unei publicații la distanță pe site-ul dvs. WordPress. Cu toate acestea, în același timp, au apărut unele găuri de securitate, care erau destul de periculoase pentru unii proprietari de site-uri pe WordPress.

Pentru a vă asigura că site-ul dvs. este sigur, este recomandat să dezactivați complet XMLRPC.php dacă nu aveți nevoie de anumite funcții necesare publicației la distanță și pentru pluginul JetPack. Apoi, puteți utiliza pluginurile ocolice care vă permit să utilizați aceste funcții, corectați găurile de securitate.

De-a lungul timpului, ne putem aștepta ca funcțiile XML-RPC să fie integrate în noul API WordPress, care va sprijini accesul la distanță fără a sacrifica securitatea.

Ați blocat accesul la XML-RPC prin plugin sau manual? Sau aveți probleme cu securitatea datorită faptului că a fost prima dată activă? Distribuiți-vă experiența în comentariile de mai jos.


Postul său arată, de asemenea, cum să facă autentificarea browserului, după cum urmează:
$ solicitare \u003d xmlrpc_encode_request ("metoda", matrice ("metoda"));
$ Auth \u003d base64_encode ($ username. ":" $ Parola);
$ Header \u003d (version_compare (phpversiv (), "5.2.8"))
? Array ("Tip de conținut: Text / XML", "Autorizare: Basic $ Auth")
: "Tip de conținut: Text / XML \\ R \\ Nautorizare: Basic$ Auth "; //
$ Context \u003d stream_context_create (matrice (http "\u003d\u003e matrice (
"Metoda" \u003d\u003e "Post",
"Antet" \u003d\u003e $ antet,
"Conținut" \u003d\u003e solicitare $
)));
$ Webservice \u003d. "http://www.example.com/rpc";
$ fișier \u003d file_get_contents ($ webservice, fals, $ context);
$ Răspuns \u003d xmlrpc_decode (fișier $);
dacă (xmlrpc_is_fault ($ răspuns)) (
RETURN "XMLRPC: răspunsul $ [defecte) (răspunsul $ [defecțiune])";
) Altfel (
Returnați răspunsul $;
}
?>
1 - Editor Notă: Aceasta este o reparație de la "Sanderswang Dt PHP la gmail dot com"

Acum 16 ani.

Stringurile binare (setate cu xmlrpc_set_type) intră într-o ... Blocați-vă ca tine "se așteaptă. Dar după fiecare caracter al 80-lea, această funcție introduce entitatea XML", care este o linie neobișnuită de Unicode, ca și cum ar provoca o folie de linie, care este admisă prostească.

Deși poate fi, provoacă probleme reale pentru unele servere XML-RPC, cum ar fi http://jakarta.apache.org/xmlRRPC/ (Nee Helma). Eliminând acele entități cu ceva de genul

$ Req \u003d preg_replace ("/ /", ", xmlrpc_encode_request (" my.method ", $ args));

funcționează în jurul problemei.

Acum 11 ani.

Trebuie remarcat faptul că codificarea nu pare să codifice nimic, doar să specifice ceea ce se întâmplă în antetul XML.

Am avut probleme cu șirurile UTF codificate dublu, fiind salvate în baza de date atunci când folosesc această funche, trimițându-l la un servlet Apache XML-RPC și stocându-l în baza de date MySQL. A fost rezolvată prin setarea "Evading" pentru a "marca" și "codificarea" la "UTF-8" (nu uitați să setați "UTF-8" în XmlRPC_Decod prea).

Se pare că șirurile codificate UTF-8 sunt escapad cu octeții lor ca entități în loc de personajele lor ca entități.

Acum 9 ani.

A încercat vreodată să transmită o matrice ca următoarele cu XMLRPC?
$ var1 \u003d matrice (7 \u003d\u003e 14,9 \u003d\u003e 18);

Array-ul de ieșire arată destul de diferit! Va arăta așa:
$ var2 \u003d matrice (14,18);

Singura soluție pe care am găsit-o este să predine un spațiu la index:
$ var3 \u003d matrice ("7" \u003d\u003e 14, "9" \u003d\u003e 18);

Folosind această metodă pe care o veți obține rezultatul potrivit. ($ Var1)

Acum 16 ani.

Această funcție trebuie utilizată de un client RPC XML pentru a crea o sarcină utilă XML pentru o cerere XML-RPC;

$ params \u003d "sistem.methodsignature";
$ Metodhod \u003d "sistem.methodhelp";
$ necesită \u003d xmlrpc_encode_request (metoda $, $ params);
echo (cererea de $);
?>

Produce;



sistem.methodhelp.

sistem.methodsignature.



Al doilea argument recunoaște tipul de variabilă și generează structura corectă XML-RPC. Consultați xmlrpc_encode () pentru mai multe detalii.

ACUM 12 ANI.

Client simplu OO cu supraîncărcare de funcții:

pHP METO TEST_HELLLOGORLD este tradus în metoda XMLRPC test.hellogorld.

clasa rpcclient (

Private $ _methods;
$ _Context privat;
Private $ _url;

Funcție __construct ($ url, $ utilizator, $ passwd) (
$ Auth \u003d base64_encode (sprintf ("% s:% s", $ utilizator, $ passwd));
$ acest -\u003e _ context \u003d stream_context_create (matrice (
"http" \u003d\u003e matrice (
"Metoda" \u003d\u003e "Post",
"Header" \u003d\u003e "tip de conținut: text / xml \\ r \\ n".
"Autorizare: Basic $ Auth",

)
));
$ acest -\u003e _ URL \u003d URL-ul $;

$ acest-\u003e înregistrareMeThod ("test_heLoworld");

Funcție __call ($ Metodname, $ Params) (
Dacă (array_key_exists ($ Metodname, $ acest -\u003e _ Metode)) (
// pe Aprlle La Fonchion RPC
$ M \u003d str_replace ("_", ".", $ Metoda);
$ r \u003d xmlrpc_encode_request ($ M, Params, Array ("Verbosity" \u003d\u003e "Noulines_Only"));
$ C \u003d $ acest -\u003e _ context;
stream_context_set_option ($ C, "http", "conținut", $ r);
$ f \u003d file_get_contents ($ acest -\u003e _ URL, FALSE, $ C);
$ Resp \u003d xmlrpc_decode ($ F);
Returnați $ resp;
) Altfel (
// pe Appelle La Fonchion de L "Objet
cal_user_method_array ($ Metodname, $ acest, $ Params);
}
}

Registrul de funcții private (metoda $) (
$ acest -\u003e _ metode [$ metoda] \u003d true;
}

De la prânz, sâmbăta de pe serverul meu, unde vor fi găzduite aproximativ 25 de site-uri de pe Wordpress, au început frânele sălbatice. De când am reușit să supraviețuiesc atacurilor anterioare (,) nu am observat, nu am înțeles imediat ce a fost problema.

Când mi-am dat seama, sa dovedit că parolele trecând + multe cereri către XMLRPC.

Ca rezultat, a fost posibilă tăierea acestuia, deși nu imediat. Cat trei tehnici simple, cum să o evitați.

Aceste tehnici sunt cel mai probabil cunoscute tuturor, dar am venit pentru o pereche de rake, pe care nu am găsit-o în descrieri - brusc va economisi timp cuiva.

1. Porniți bustul, Limitați de login Incercle Plugin - Puneți-l, deoarece alte protecții atârnă puternic serverul, de exemplu, atunci când utilizați pluginul de soluții de securitate de conectare, serverul a murit după o jumătate de oră, pluginul este foarte încărcat în baza de date.

În setare, asigurați-vă că ați activat testul "pentru proxy" - altfel va defini IP-ul serverului dvs. pentru toate și blocați automat toate.
Actualizați, vă mulțumesc, detaliile de mai jos în comentariile - o bifare "pentru proxy" Porniți numai dacă definiția nu funcționează când este activată "Conexiune directă"

2. Deconectați dispozitivul XML RPC - Dezactivați pluginul XML-RPC (pur și simplu activați-l și totul).

3. Închideți WP-Login.php - Dacă contactați site-ul prin IP, pluginul nu funcționează și murături continuă pe site-ul DAB. Pentru a evita acest lucru, V.HTACCESS Adaugă:

Ordinea neagă, permiterea de a fi de la toate

Fișierul WP-Login este copiat, redenumit orice nume ciudat, de exemplu Poletnormalny.php și în interiorul fișierului cu auto-transmisie toate inscripțiile WP-LOGIN.PHP pe Poletnormalny.php.
Toate, acum puteți contacta administratorul numai în fișierul dvs.

După acești 3 pași simpli, site-urile au început să zboare din nou și au venit calm.

Ei bine, dintr-o dată interesantă

O opțiune pentru a vedea ce sunteți atacat. Acest lucru poate fi văzut în jurnalele nginx (de exemplu, aici este calea accesului Fișier Debian / Var / Log / Nginx).

Introducere în XML-RPC

Există multe resurse diferite în rețeaua care oferă utilizatorilor anumite informații. Nu există pagini statice obișnuite, dar, de exemplu, datele preluate din baza de date sau din arhive. Aceasta poate fi o arhivă a datelor financiare (cotațiile valutare, datele de valori mobiliare), datele meteorologice sau mai multe informații voluminoase - știri, articole, mesaje de la forumuri. Aceste informații pot fi transmise vizitatorului paginii, de exemplu, prin intermediul formularului, ca răspuns la cerere sau de fiecare dată când este posibil să se genereze dinamic. Dar dificultatea este că adesea astfel de informații nu este nevoie de utilizatorul final - o persoană pe măsură ce alte sisteme, programe pe care aceste date le vor utiliza pentru calculele sau alte nevoi.

Exemplu real: pagina site-ului bancar, pe care sunt afișate cotații valutare. Dacă mergeți la pagină ca utilizator obișnuit, prin browser, vedeți toate proiectarea paginii, a bannerelor, a meniurilor și a altor informații că "Framente" adevăratul obiectiv al căutării este cotația valutară. Dacă aveți nevoie să faceți aceste citate în magazinul dvs. online, atunci nimic altceva nu va rămâne de îndată ce ați selectat manual datele dorite și treceți prin clipboard pe site-ul dvs. Și așa trebuie să facă în fiecare zi. Nu există nici o cale de ieșire?

Dacă decideți problema "în frunte", atunci soluția sugerează imediat: programul (script de pe site), care este necesar pentru date, primește o pagină de la server ca "utilizator obișnuit", dezasamblate (pars ) Codul HTML rezultat și evidențiază informațiile necesare de la acesta. Acest lucru se poate face printr-o expresie obișnuită obișnuită sau cu orice parser HTML. Complexitatea abordării este în inelectivitatea sa. În primul rând, pentru a obține o mică parte din date (datele privind monedele sunt literalmente duzini alte caractere), trebuie să primiți întreaga pagină și acest lucru este cel puțin câteva zeci de kilobytes. În al doilea rând, cu orice schimbare a codului paginii, de exemplu, designul sa schimbat sau altceva, algoritmul nostru de analiză va trebui să redo. Da, iar resursele vor fi selectate decente.

Prin urmare, dezvoltatorii au ajuns la decizie - este necesar să se dezvolte un mecanism universal care să permită transparent (la nivelul protocolului și al mediului de transmisie) și este ușor să se schimbe datele între programele care ar putea fi în orice loc Limba și lucrările sub controlul oricăror sisteme de cameră de operare și pe orice platformă hardware. Un astfel de mecanism este numit acum "servicii web" (Web-Service), "Săpun", "arhitectură orientată spre servicii). Pentru schimbul de date, se utilizează standarde deschise și testate în timp - pentru trimiterea mesajelor HTTP (deși puteți utiliza alte protocoale - SMTP, de exemplu). Datele însuși (în exemplul nostru - ratele valutare) sunt transmise ambalate în format transfrontalier - ca documente XML. Pentru aceasta, este inventat un standard special - săpun.

Da, acum servicii web, săpun și XML au toate pentru auz, acestea au început să introducă în mod activ ambele corporații mari cum ar fi IBM și Microsoft să producă noi produse concepute pentru a ajuta la implementarea totală a serviciilor web.

Dar! Pentru exemplul nostru cu cursuri valutare, care ar trebui transmise de pe site-ul băncii din motorul magazinului online, o astfel de soluție va fi foarte complexă. La urma urmei, numai descrierea standardului de săpun ocupă indecente și jumătate de mii de pagini și asta nu este totul. Pentru utilizare practică, va trebui să studiați în continuare lucrul cu biblioteci și extensii terțe (numai la PHP 5.0 include o bibliotecă pentru a lucra cu săpun), scrie sute și mii de rânduri de codul lor. Și toate acestea pentru a obține mai multe litere și numere - este în mod clar foarte greu și irațional.

Prin urmare, există un altul, cu întinderea cu care puteți spune un standard alternativ pentru schimbul de informații - XML-RPC. A fost concepută cu participarea Microsoft de către compania Userland Software Inc și este destinat transferului de date unificat între aplicații prin Internet. Acesta poate înlocui săpunul atunci când se construiește servicii simple, unde nu sunt necesare toate caracteristicile "corporative" ale acestor servicii web.

Ce înseamnă abrevierea XML-RPC? RPC este decriptat ca apel de procedură la distanță - apel de procedură la distanță. Aceasta înseamnă că aplicația (indiferent, scriptul de pe server sau aplicația obișnuită pe computerul client) poate fi transparent utilizând o metodă care este implementată fizic și executată pe un alt computer. XML aici este folosit pentru a oferi o descriere universală a descrierii datelor transmise. Ca transport, protocolul HTTP este aplicat pentru a trimite mesaje, care vă permite să schimbați liber date prin orice dispozitive de rețea - routere, firewall-uri, servere proxy.

Astfel, pentru utilizare, trebuie să aveți: serverul XML-RPC, care oferă una sau mai multe metode, clientul XML-RPC, care poate forma o solicitare corectă și procesează răspunsul serverului și, de asemenea, să cunoască parametrii serverului necesar pentru Lucrări de succes - adresa, numele metodei și parametrii de metodă transmisă.

Toate lucrările cu XML RPC apar în modul "Cerere-Răspuns", aceasta este una dintre diferențele dintre standardul de săpun, unde există concepte de tranzacții și abilitatea de a face apeluri amânate (când serverul salvează cererea și răspunde solicitării și răspunde la acesta la un moment dat în viitor). Aceste caracteristici suplimentare vor fi mai utile pentru serviciile corporative puternice, complică în mod semnificativ dezvoltarea și susținerea serverelor și pun cerințe suplimentare pentru dezvoltatorii de luare a deciziilor client.

Procedura de lucru cu XML RPC începe cu formarea unei interogări. O cerere tipică arată astfel:

POST / RPC2 http / 1.0
Agent utilizator: ESHOP-TEST / 1.1.1 (FreeBSD)
Gazdă: server.localnet.com.
Tip de conținut: Text / XML
Lungimea conținutului: 172



Testmetod.
Bună, XML-RPC!


În primele rânduri, se formează antetul standard de solicitare HTTP. Parametrii obligatorii includ gazdă, tip de date (tip MIME), care trebuie să fie text / xml, precum și lungimea mesajului. De asemenea, standardul indică faptul că câmpul de agent de utilizator trebuie umplut, dar poate conține o valoare arbitrară.

Apoi este antetul obișnuit al documentului XML. Solicitarea elementelor rădăcinilor - Poate fi doar unul și nu poate conține astfel de noduri ca filiale. Aceasta înseamnă că o singură cerere poate fi numită doar o singură metodă de pe server.

Linia Testmetod. Indică faptul că numim metoda numită Testmetod. Dacă este necesar, aici puteți specifica numele programului sau modulului care conține metoda, precum și calea către acesta. Specificație XML-RPC Deși impune anumite limitări pe setul de caractere că metoda poate fi indicată, dar cum să le interpreteze - depinde complet de implementarea serverului.

Următoarele sunt setate la parametrii transmis. Pentru aceasta servește secțiunii Care pot conține un număr arbitrar de sub-elemente Care conțin un parametru descris de etichetă . Parametrii și tipurile de date pe care le vom uita la puțin mai departe. În versiunea noastră, este transmis un parametru de șir închis în etichetă. .

După ce ați descrie toți parametrii, urmați etichetele de închidere. Solicitarea și răspunsul la XML-RPC Acestea sunt documente normale XML, deci toate etichetele trebuie închise. Dar nu există etichete unice în XML-RPC, deși în standardul XML sunt prezente.

TETENER Vom analiza răspunsul serverului. Titlul răspunsului HTTP, dacă cererea este procesată cu succes, serverul returnează răspunsul http / 1.1 200 OK. De asemenea, ca și în cadrul interogării, trebuie să specificați corect tipul MIME, lungimea mesajului și data datei de răspuns.

Corpul însuși este următorul:



adevărat.


Acum, în loc de eticheta rădăcină indică eticheta în care rezultatele procesării interogării sunt investite imediat. Din păcate, răspunsul nu este transmis prin metoda metodei, deci trebuie să o salvați pe partea clientului pentru a evita confuzia dacă sunt cauzate simultan diferite metode.

Dacă a apărut o eroare la procesarea solicitării dvs., atunci în schimb Răspunsul va fi un element în care se va atașa structura care descrie eroarea. O descriere a erorii conține un cod de eroare numeric și descrierea textului său.

Și acum ia în considerare pe scurt tipurile de date din XML-RPC. Tipurile de date totale sunt 9 - șapte tipuri simple și 2 complexe. Fiecare tip este descris de eticheta sa sau de un set de etichete (pentru tipuri complexe).

Tipuri simple:

Numere întregi - Etichetă sau ;

Tip logic. - Etichetă pot lua ambele valori de 0/1 și adevărat / false;

ASCII-String. - descrie eticheta și poate conține un șir arbitrar de caractere;

Numere de puncte plutitoare - Etichetă Poate conține, de asemenea, un semn al numărului, partea fracțională este separată de un punct;

data si ora - descrie eticheta și trebuie să respecte formatul ISO8601. Pentru prelucrarea ulterioară a scripturilor, un astfel de format este un pic inconfortabil, deci este întotdeauna convertit la trimiterea / primirea unei interogări. Acest lucru poate face o caracteristică specială ca parte a bibliotecii sau, dacă nu, dezvoltatorul trebuie să convertească o dată manual.

Ultimul tip simplu este Șir codificat în base64care este descrisă de etichetă . Acest tip este universal, cu acesta, puteți transmite orice date între client și server, deși cantitatea de date transmise datorită unei astfel de codificări crește. Dar aceasta este o consecință a caracterului textului protocolului și al formularului XML în special.

Tipurile complexe sunt reprezentate de structuri și matrice. Structura este determinată de elementul rădăcină care pot conține un număr arbitrar de articole definirea fiecărui membru al structurii. Membrul structurii este descris de două etichete: primul , descrie numele membrului, al doilea, , Conține o valoare membru (împreună cu o etichetă care descrie tipul de date).

Arrays nu au nume și descrise etichetă care conține un element , și una sau mai multe filiale unde sunt specificate date specifice. O matrice poate conține orice alte tipuri în ordine aleatorie, precum și alte matrice, ceea ce vă permite să descrieți matricele multidimensionale. De asemenea, puteți descrie o serie de structuri. Faptul că matricea nu are un nume complicate în unele cazuri utilizarea sa, pentru transferul de date complexe pe care trebuie să le aibă în mod repetat ambalate la alte tipuri (de exemplu, să transmită mai multe matrice, fiecare matrice poate fi ambalată separat în Structura, apoi creați o matrice din aceste structuri).

Desigur, cineva va spune că o astfel de listă de tipuri de date este foarte slabă și "nu vă permite să vă întoarceți". Da, dacă trebuie să transmiteți obiecte complexe sau cantități mari de date, este mai bine să utilizați săpun. Și pentru aplicații mici, nedemandante, XML-RPC este pe deplin potrivită, în plus, foarte des chiar și capabilitățile sale se transformă prea mult! Dacă luăm în considerare ușurința desfășurării, un număr foarte mare de biblioteci pentru aproape orice limbi și platforme, un sprijin larg în PHP, apoi XML-RPC pur și simplu nu are pur și simplu concurenți. Deși este imposibil să-l sfătuim imediat ca o soluție universală - în fiecare caz particular, este necesar să se rezolve în circumstanțe.