O privire la API-ul WordPress HTTP wp_remote_get - răspunsul

În această serie, am aruncat o privire la wp_remote_get WordPress HTTP API funcția pentru a înțelege cum funcționează, cum putem folosi, și argumentele opționale pe care le acceptă.

De aici, putem scrie cereri detaliate; totuși, asta e doar jumătate din ea - există și răspunsul.

În cel de-al doilea articol, am aruncat o privire asupra a ceea ce ar arăta un răspuns de bază, cum să îl evalueze și cum să-l afișăm pe ecran, dar de fapt nu am vorbit despre răspuns în detaliu.

Dacă doriți să scrieți mai multe cereri avansate și să scrieți un cod mai defensiv, atunci este important să înțelegeți datele trimise ca răspuns. În acest articol final, vom face exact acest lucru.


O privire la răspunsul

În primul rând, este important să înțelegeți ce vreau să spun prin scrierea unui cod defensiv: atunci când scriem software, trebuie să lucrăm adesea cu cazurile în care un utilizator poate face ceva greșit, intrarea poate fi setată incorect sau datele pot fi preluate sau primite - cum ar fi în cazul unui răspuns - incorect.

În acest scop, codificăm defensiv împotriva acestor scenarii, astfel încât software-ul nostru să nu se prăbușească în totalitate sau să nu explodeze în timp ce utilizatorul îl folosește. În schimb, acesta nu reușește cu grație și continuă să curgă.

Prin cunoașterea exactă a funcției pe care o primește ca răspuns la cererea acesteia, știm ce date să căutăm și apoi cum să ne ocupăm de cazul în care nu se întoarce așa cum ne așteptăm.

Un exemplu de răspuns

Pentru a stabili stadiul pentru ceea ce trebuie să așteptăm, să aruncăm o privire la un exemplu de răspuns. Să zicem că trebuie să faci a OBȚINE cereți-i unei adrese URL care să vă aducă un simplu fragment de text.

În general, vă puteți aștepta să faceți cereri mai complicate în cazul în care răspunsul ar putea fi XML sau JSON sau altceva; cu toate acestea, toate aceste informații vor fi stabilite în corp indexul matricei de răspuns. Deci, dacă înțelegeți ce să vă așteptați, atunci înțelegeți cum să faceți acest lucru.

Cu asta a spus că acesta este răspunsul pe care l-ați putea aștepta să îl primiți dintr-o simplă cerere către un domeniu care nu întoarce decât text simplu.

 Array ([headers] => Array ([date] => Joi, 30 Sep 2010 15:16:36 GMT [server] => Apache [x-powered-by] => => 10.90.6.243 [expira] => Joi, 30 Sep 2010 03:16:36 GMT [cache-control] => Array ([0] => no-store, no-cache, must- revalidate [1] = > post-check = 0, pre-check = 0) [varia] => Accept-Encoding [content-length] => 1641 [connection] => > "Un simplu bit de text." [Răspuns] => Array ([code] => 200 [message] => OK) [cookies] => Array

Nimic altceva decât o matrice (sau, într-adevăr, o matrice de matrice). Nimic de asemenea rău, bine?

Să examinăm în detaliu fiecare dintre elementele de răspuns.

Cap

După cum puteți spune din răspunsul de mai sus, antetele sunt de fapt compuse dintr-o altă matrice care conține alte informații.

Înainte de a privi fiecare parte din informațiile de mai sus, este important să înțelegeți exact ce este un antet. Pe scurt, anteturile oferă informații despre comunicarea de solicitare / răspuns care există între client și server.

Există o varietate mare de anteturi care pot fi trimise înapoi (multe dintre ele depășesc limitele acestui articol), dar toate acestea ne ajută să obținem informații nu numai despre cerere, ci despre serverul cu care suntem comunicarea.

Cu acest lucru, să ne uităm la fiecare element de antet în detaliu.

Data

În mod clar, acesta este un element excepțional de ușor de înțeles: pur și simplu, aceasta este data și ora la care a fost trimis mesajul. Este evident că include ziua, data și ora, toate în Greenwich Mean Time, care este un standard global de timp.

Server

Elementul server se referă la tipul de software pe care rulează serverul. De cele mai multe ori, probabil că veți vedea Apache; cu toate acestea, există și alte aplicații de servere disponibile astăzi, cum ar fi IIS și nginx sus și în veni.

X-Powered By-

X-Powered-By se referă la software-ul de server care alimentează tranzacția comunicației. În cazul nostru, vom vedea PHP care pur și simplu înseamnă că cererea noastră a fost trimisă la un server care rulează Apache și PHP.

Acest lucru nu poate fi întotdeauna cazul, totuși.

De exemplu, s-ar putea să ajungeți la comunicarea cu un server care rulează nginx și Python sau un alt tip de software de tip server care rulează Ruby on Rails.

X-Server

Acest element de răspuns specific se referă la adresa IP a serverului la care este trimisă cererea. Rareori am avut nevoie să cunosc această informație specială; cu toate acestea, dacă ați terminat să primiți un răspuns neașteptat, în ciuda faptului că toate celelalte informații arată în ordine, ar putea ajuta să aflați dacă IP-ul serverului se potrivește cu ceea ce v-ați aștepta pentru domeniul căruia îi este trimisă cererea.

expiră

Ori de câte ori se face o cerere și se trimite un răspuns, răspunsul are o durată de viață, ca să spunem așa.

Mai exact, răspunsul va fi considerat "învechit" după o anumită perioadă de timp. Evident, momentul în care răspunsul este considerat stau este atunci când se spune că răspunsul a expirat.

Cât timp un răspuns este considerat neactualizat se bazează pe configurația serverului, dar marcajul temporal are același format ca și data cererii.

Cache-Control

Controlul cache-ului se referă la ideea că un browser web (sau un alt mecanism de cache care există între client și server) poate sau nu poate să utilizeze primul răspuns ca răspuns pentru cererile viitoare.

De exemplu, dacă un server răspunde no-cache, atunci aceasta înseamnă că browserul, serverul sau alt program software sau mecanismul de memorare în cache trebuie să trateze fiecare răspuns ca răspuns nou. Dacă, pe de altă parte, no-cache este nu specificat, atunci primul răspuns poate fi singurul răspuns pe care îl puteți obține (cel puțin până când cache-ul este setat să expire).

Acest lucru este în mod evident compus din doi indici:

  1. Primul index conține dacă este sau nu no-cache a fost stabilit
  2. Al doilea index conține informații dacă datele au fost stocate în memoria cache. Pur și simplu pune, în cazul în care post-cec și de pre-verificare a intervalul ca fiind expirat, atunci va fi cerută o versiune mai nouă a datelor; în caz contrar, va fi recuperată o versiune stocată în cache.

Acest aspect particular al caching-ului este în afara domeniului de aplicare al acestei serii, deoarece mult mai mult ar putea fi scris și explicat; cu toate acestea, definiția de mai sus ar trebui să fie suficientă pentru a explica antetele pe care le vedeți.

Varia

Această valoare a antetului este similară antetului Cache-Control prin faptul că îi spune serverelor solicitante cum să se ocupe de cereri similare, ulterioare.

În general, acest lucru va instrui serverul dacă poate fi utilizat sau nu un răspuns de memorie cache sau trebuie recuperată o valoare nouă. Acesta este un alt element care poate deveni excesiv de complicat, dar pentru a încerca să distileze explicația în ceva care este puțin mai amplu pentru ceea ce discutăm, elementul variator de antet poate, de asemenea, să instruiască serverul pe diferite tipuri de conținut pe care client pot procesa.

Astfel, în exemplul de mai sus, instruim serverul că clientul nostru este capabil să proceseze informații codificate.

Content-Length

Conținutul-lungime este un concept simplu cu un singur gotcha: Mai întâi, acesta definește pur și simplu lungimea corpului răspunsului.

Lucrul este că se întâmplă în bytes de 8 biți. Aceasta înseamnă că răspunsul nu este furnizat în kilobyte, megaocteți sau orice formă de date pe care suntem obișnuiți să o vedem.

În acest scop, poate fi necesar să faceți o conversie dacă doriți să obțineți mai multe informații bogate despre datele returnate.

Conexiune

Valoarea conexiunii specifică ce tip de conexiune ar prefera browserul solicitant. Mai sus, vedem că valoarea este definită ca fiind "închisă", ceea ce înseamnă că odată ce răspunsul este trimis, conexiunea poate fi închisă.

Cu toate acestea, există și alte alternative. De exemplu, este posibil să primiți "păstrați-viu" care, evident, dorește să mențină conexiunea în viață pentru o anumită perioadă de timp.

Din nou, acesta este un alt exemplu de ceva care ar necesita un articol propriu pentru a discuta pe deplin; cu toate acestea, acest lucru nu oferă o perspectivă asupra tipului de conexiune preferat de server care vă poate ajuta în construirea de cereri viitoare.

Tipul de conținut

Acest lucru este cu adevărat relevant doar pentru ambele POST și APĂSAȚI solicitări. Pe scurt, aceasta definește tipul corpului cererilor.

Acest lucru poate varia în funcție de datele trimise. Uneori poate fi o adresă URL codificată, uneori poate fi PHP, uneori poate fi altceva. Indiferent, acest lucru vă ajută să vă asigurați că putem verifica dacă datele care revin în conținut sunt în concordanță cu ceea ce ne așteptăm la cererea noastră.

Corp

Elementul de corp conține de fapt informațiile returnate de la server.

În exemplul nostru din două articole în urmă, am primit un șir JSON de pe Twitter. În exemplul de mai sus, primim un șir simplu de text. În cele din urmă, răspunsul ar putea reveni ca o formă de date binare care ar avea nevoie de un nivel de de-serializare.

Indiferent de situație, depinde de noi ca implementatori ai cererii de a ști cum să decodăm corect răspunsul înainte de a-l afișa utilizatorilor noștri.

Raspuns

Răspunsul se referă de fapt la codul de răspuns HTTP trimis de server înapoi la clientul solicitant. Dacă nu sunteți familiarizat cu codurile de stare HTTP, vă recomandăm să verificați HTTPStat.us pentru o referință foarte bună.

Pe scurt, un răspuns este alcătuit dintr-un cod numeric și un mesaj bazat pe text pentru a indica rezultatul solicitării.

Cod și mesaj

În exemplul de mai sus, puteți vedea că am primit codul de stare "200" și mesajul "OK". Perechea de coduri și mesaje trebuie să fie întotdeauna sincronizată una cu cealaltă.

Aceasta înseamnă că, dacă primiți un "403", atunci trebuie să primiți și un "Interzis", sau dacă primiți un "404" atunci ar trebui să primiți un mesaj "nu a fost găsit".

Personal, am descoperit că aceste valori particulare sunt importante pentru a diagnostica când au apărut probleme în ceea ce privește cererile pe care le-am făcut.

fursecuri

În cele din urmă, matricea cookie se referă la orice informație care a fost trimisă prin fire pe baza cookie-urilor care există între clientul curent și serverul care realizează comunicarea.

În funcție de natura solicitării dvs., aceasta poate sau nu poate fi goală - variază prea mult de la caz la caz pentru a oferi un ghid definitiv. Pe scurt, dacă nu s-au stabilit module cookie între cele două conexiuni, atunci acesta va fi întotdeauna gol; în caz contrar, datele care cuprind matricea cookie vor fi bazate în mod specific pe modulele cookie care există între cele două servicii.


Concluzie

În ansamblu, există o cantitate destulă de date și asta voi variază de la solicitare la solicitare pe baza cererilor pe care le cereți și pe baza răspunsului serverului; totuși, chestia este că știți acum ce să se aștepte și cum să se ocupe de toate cazurile.

Dacă rău devine din ce în ce mai rău în munca dvs., puteți utiliza întotdeauna un program de depanare sau pur și simplu plasați unele declarații de depanare, cum ar fi print_r sau var_dump pentru a vedea ceea ce serverul se întoarce, astfel încât să puteți gestiona grațios erorile.

Mai târziu, vom revizui API-ul WordPress HTTP pentru a examina alte metode, cum ar fi wp_remote_post și wp_remote_request astfel încât să obținem o imagine completă a API-ului HTTP.

Până atunci, această serie va avea speranța că va oferi o acoperire atât de profundă wp_remote_get pentru a vă ajuta nu numai să vă îmbunătățiți munca, ci și să vă atrageți curiozitatea cu privire la ce altceva este posibil atunci când vine vorba de cereri la distanță.

Cod